我一直在学习硒的过程。我使用firefox webdriver编写了一个脚本,效果很好。但是我现在正试图将该脚本转换为无头镀铬。
我写的:
driver = webdriver.Chrome()
driver.get('https://www.snl.com/web/client?auth=inherit&contextType=external&username=string&enablePersistentLogin=true&OverrideRetryLimit=0&SwitchGetToPostLimit=50000&contextValue=%2Foam&password=secure_string&challenge_url=https%3A%2F%2Fwww.snl.com%2Fweb%2Fclient%3Fauth%3Dinherit&request_id=-2343654539289081584&authn_try_count=0&locale=en_GB&resource_url=https%253A%252F%252Fwww.snl.com%252Finteractivex%252Fdefault.aspx')
time.sleep(14)
login_forms = driver.find_elements_by_class_name('form-control.input-sm.snl-widgets-input-text.snl-selectable.action')
username = login_forms[3]
password = login_forms[4]
username.send_keys('user')
password.send_keys('pass')
我知道使用time.sleep不是最佳的,有更好的方法来实现我在硒中的等待。我稍后会回去纠正。 这就是说当我的webdriver是firefox时,上面的代码适用于snl.com,但是当它是chrome时,它就完全没有了。
我通过打印innerhtml尝试了调试,但chrome没有返回任何内容。
希望有人可以对这里出了什么问题有所了解。 感谢任何帮助!
答案 0 :(得分:1)
要识别Email address
和Password
字段,您使用的Locator Strategy
看起来很脆弱。您必须采用Locator Strategy
,通过以下任何代码块唯一标识Email address
和Password
字段:
css_selector
:
username = driver.find_element_by_css_selector("input.form-control.input-sm.snl-widgets-input-text.snl-selectable.action[name=username]")
password = driver.find_element_by_css_selector("input.form-control.input-sm.snl-widgets-input-text.snl-selectable.action[name=password]")
username.send_keys('user')
password.send_keys('pass')
xpath
:
username = driver.find_element_by_xpath("//input[@class='form-control input-sm snl-widgets-input-text snl-selectable action' and @name='username']")
password = driver.find_element_by_xpath("//input[@class='form-control input-sm snl-widgets-input-text snl-selectable action' and @name='password']")
username.send_keys('user')
password.send_keys('pass')