如何使用selenium自动登录网易邮箱,及xpath中stars-with与ends-with的用法介绍
网易邮箱在使用selenium实现自动登录的时候,有一点是需要我们注意的,如果没有注意到这个点,那么就是没有办法实现自动登录的。这个需要关注的点就是iframe窗口,其实通过审查元素仔细看你会发现,网易邮箱这个登录界面的html中有一个iframe,iframe下又有一个<html>,这其实就是说,在当前页面有个新的窗口,窗口中有个html。所以,要想查找到登录的元素,我们必须要将窗口切换到iframe中。具体代码如下:
from selenium import webdriver from selenium.webdriver import ChromeOptions, FirefoxProfile from fake_useragent import UserAgent import time def google(): # ipports = self.huo_ip() ua = UserAgent() option = ChromeOptions() userage = ua.chrome # option.add_argument(('--proxy-server=' + ipports[0] + ':' + ipports[1])) option.add_argument('user-agent=' + userage + '') option.add_argument('disable-infobars') option.add_experimental_option('excludeSwitches', ['enable-automation']) option.add_experimental_option("useAutomationExtension", False) browser = webdriver.Chrome(options=option, executable_path='chromedriver.exe') browser.maximize_window() browser.implicitly_wait(2) browser.get('https://mail.163.com/') #下面这句就是切换到iframe窗口下的代码,其中需要注意的是iframe[starts-with(@id, 'x-URS-iframe')] browser.switch_to.frame(browser.find_element_by_xpath("//iframe[starts-with(@id, 'x-URS-iframe')]")) browser.find_element_by_name("email").send_keys("yueqingche") browser.find_element_by_name("password").send_keys("seo123456") browser.find_element_by_id('dologin').click() time.sleep(15) if __name__ == '__main__': google()
上面之所以使用iframe[starts-with(@id, 'x-URS-iframe')],主要原因是因为网易中这个iframe的id="x-URS-iframe1612229174595.2632"中,后面的那一段数字是一个变量,你每次打开他们都是不一样的,所以精确的找是无法找到这个iframe,必须要使用starts-with(@id, 'x-URS-iframe'),starts-with的意思是以么么开头,其中与之相对应的有ends-with,顾名思义就是以么么结尾。
评论