Selenium ChromeDriver找不到元素,而firefox驱动可以找到相同的元素(Python)

时间:2018-01-15 04:48:49

标签: python python-3.x selenium selenium-webdriver selenium-chromedriver

我一直在学习硒的过程。我使用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没有返回任何内容。

希望有人可以对这里出了什么问题有所了解。 感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

要识别Email addressPassword字段,您使用的Locator Strategy看起来很脆弱。您必须采用Locator Strategy,通过以下任何代码块唯一标识Email addressPassword字段:

  • 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')