如何使用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,顾名思义就是以么么结尾。







评论