【问题标题】:How to construct css_selector to work with Selenium and Python如何构造 css_selector 以使用 Selenium 和 Python
【发布时间】:2020-05-06 02:46:08
【问题描述】:

在 selenium python 中使用 CSS 选择器,我正在尝试自动登录网页。

而不是使用:

driver.find_element_by_id()

我想练习使用:

driver.find_elements_by_css_selector()

所以我这样编码:

userId = driver.find_elements_by_css_selector('input[id = "pass"]')
userId.send_keys('blabla78945@gmail.com')

但它不会找到它应该输入的元素。这个案例的问题是什么?

【问题讨论】:

  • 您好,欢迎来到 Stackoverflow!我不认为input[id = "pass"] 是一个有效的东西,你可以尝试使用input[type=password]
  • 您还需要检查您的代码是否运行得太快,因为很多时候页面没有时间加载,请参阅 browser.wait() 直到方法
  • 先显示真实网址——不同的页面可能需要不同的解决方案。
  • 总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图)放在有问题的(不是评论)中。还有其他有用的信息。
  • 你应该使用 find_element 而不使用 s 来获取单个元素。现在您将find_elementss 一起使用,因此获取元素列表,您可能需要[0] 来处理列表中的第一个元素。也许先使用print( userId ) 看看你得到了什么。

标签: python selenium selenium-webdriver css-selectors webdriver


【解决方案1】:

你已经够近了。如果您能够使用find_elements_by_id() 在所需元素内发送字符序列,如下所示:

userId = driver.find_element_by_id('pass')
userId.send_keys('blabla78945@gmail.com')

用作Locator Strategy 可以实现相同的效果,如下所示:

  • 仅将id 属性用作css_selector

    userId = driver.find_element_by_css_selector("#pass")
    userId.send_keys('blabla78945@gmail.com')
    
  • 使用 tagName <input>id 属性作为 css_selector

    userId = driver.find_element_by_css_selector("input#pass")
    userId.send_keys('blabla78945@gmail.com')       
    

注意:您需要使用 find_element_by_css_selector() 返回所需的 web 元素,而 find_elements_by_css_selector() 返回一个 List,您可以'不要在 List 上调用 send_keys()


但是,如果您试图在新页面加载后立即访问所需的元素,那么理想情况下,您需要为element_to_be_clickable() 引入 WebDriverWait,并且您可以使用以下任一 Locator Strategies

  • 使用id 属性作为CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#pass"))).send_keys("blabla78945@gmail.com")
    
  • 使用 tagName <input>id 属性作为 CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#pass"))).send_keys("blabla78945@gmail.com")
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多