python和selenium在尝试百度首页登录时发现,点击登录后会弹出登录小窗口,小窗口默认是二维码登录。然后按理说应该选择左下角的用户名登录,可是无论我怎么定位,程序始终报错。网上我搜索的方案也都不行。我也没有发现其他frame可以切入。
import time from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get('http://www.baidu.com/') time.sleep(1) #进入登录页面 driver.find_element_by_link_text('登录').click() #选择用户名登录方式 driver.find_element_by_xpath('//*[@class="tang-pass-footerBar"]/p[text()="用户名登录"]').click() #直接点击登录 driver.find_element_by_class_name("pass-form-item-submit").click() err_str = driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_3__error"]').text try: assert err_str == '请您输入手机/邮箱/用户名' print('Test Pass') except: print('Test Fail')
今天解决了,应该是选择class的时候不要前面相同的部分(pass-form-item pass-form-item-submit只选择pass-form-item-submit部分),另外不要选择类似‘TANGRAM__PSP_3__submitWrapper’的来定位,感觉PSP_3这个会不停的变。
不是这个ID会变,可能是因为点击“登录”后,页面没有完全加载,需要进入登录页面后再加上一个等待时间,这样就可以了
左下角 用户名登录
import time from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get('http://www.baidu.com/') time.sleep(1) #进入登录页面 driver.find_element_by_link_text('登录').click() #选择用户名登录方式 driver.find_element_by_xpath('//*[@class="tang-pass-footerBar"]/p[text()="用户名登录"]').click() #直接点击登录 driver.find_element_by_class_name("pass-form-item-submit").click() err_str = driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_3__error"]').text try: assert err_str == '请您输入手机/邮箱/用户名' print('Test Pass') except: print('Test Fail')
今天解决了,应该是选择class的时候不要前面相同的部分(pass-form-item pass-form-item-submit只选择pass-form-item-submit部分),另外不要选择类似‘TANGRAM__PSP_3__submitWrapper’的来定位,感觉PSP_3这个会不停的变。