【问题标题】:Problems placing "driver.find_element_by_css_selector" in an if condition with selenium使用 selenium 将“driver.find_element_by_css_selector”置于 if 条件下时出现问题
【发布时间】:2021-10-12 19:01:23
【问题描述】:

我正在尝试在 if 条件下使用 webdriver 库中的函数,但这种情况是有条件的,也就是说,它并不总是会发生。 显然它给了我一个错误,因为条件不正确的时候,函数“driver.find_element_by_css_selector()”找不到元素。有没有办法让我的代码不会崩溃?

if driver.find_element_by_css_selector("#react-root > div > div > section > main > div > div > div > div > a").text() == 'Volver a Instagram.':
        return 0
    else:
        if(p == 1):
            elementName1 = driver.find_elements_by_class_name("tWeCl")
            src_url = elementName1[0].get_attribute("src")
        if(p == 2):
            elementName2 = driver.find_elements_by_class_name("tWeCl")
            src_url = elementName2[0].get_attribute("src")

【问题讨论】:

  • .text,而不是 text()
  • 您可以将该代码块放入try, except 块中。

标签: python selenium selenium-webdriver web-scraping webdriver


【解决方案1】:

你可以改成查找多个元素find_elements_by_css_selector,它会返回一个列表

-如果列表大小 = 0 --> 没有元素

-if list size > 0 --> 找到匹配定位器的元素

elements = driver.find_elements_by_css_selector("#react-root > div > div > section > main > div > div > div > div > a").text() == 'Volver a Instagram.'

if len(elements) == 0:
    # action when doesn't find any elements
else:
    if elements[0].text == "Volver a Instagram.":
        the rest...

【讨论】:

  • 我的问题是在第一个if的情况下,里面的东西并不重要,因为代码没有被内部ifs崩溃
  • 是的,我明白了,我的建议是从find_element 更改为find_elements
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 2023-02-26
  • 1970-01-01
  • 2021-10-22
相关资源
最近更新 更多