【问题标题】:trying to print using nth-child() in python script and selenium尝试在 python 脚本和 selenium 中使用 nth-child() 进行打印
【发布时间】:2020-12-31 04:12:29
【问题描述】:

我正在使用 selenium 和 python3。 我有一个LIST id 喜欢使用 nth-child(1n) 在我的脚本中循环

for n in self.driver_web_browser.find_element_by_css_selector('#ctl00_ContentPlaceHolder1_Estadocombo > option:nth-child({n})'):
            str.append(n.text())
            print(str)

我遇到错误请帮忙。

for n in self.driver_web_browser.find_elements_by_css_selector('#ctl00_ContentPlaceHolder1_Estadocombo > option:nth-child({n})'):

文件“/Users/ef/Desktop/MyBot/myBot/BOTS/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py”,第 614 行,在 find_elements_by_css_selector return self.find_elements(by=By.CSS_SELECTOR, value=css_selector) 文件“/Users/ef/Desktop/MyBot/myBot/BOTS/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py”,第 1007 行,在 find_elements 'value': value})['value'] 或 [] 文件“/Users/ef/Desktop/MyBot/myBot/BOTS/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py”,第 321 行,在执行 self.error_handler.check_response(响应) 文件“/Users/ef/Desktop/MyBot/myBot/BOTS/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py”,第 242 行,在 check_response 引发异常类(消息、屏幕、堆栈跟踪) selenium.common.exceptions.InvalidSelectorException:消息:无效选择器:指定了无效或非法的选择器 (会话信息:chrome=85.0.4183.102)

【问题讨论】:

  • 什么样的错误?
  • 你应该使用 find_elements 来返回 webelements 列表
  • @Sureshmani,谢谢你的帮助,但仍有问题
  • @edward - 你想提取下拉菜单的文本吗?或者您想从下拉列表中提取特定元素的文本?
  • @DilipMeghwal 我正在尝试提取整个下拉列表。让我试试下面的解决方案。我没有使用过选择。但是我发现了一个不同的解决方案,它也可以工作。Select 方法看起来更简单,这很棒!非常感谢!

标签: python-3.x selenium webdriver chromium


【解决方案1】:

由于这些是选择和选项值,您可以使用 Select 类

from selenium.webdriver.support.ui import Select


data = [] 
select = Select(driver.find_element_by_id('ctl00_ContentPlaceHolder1_Estadocombo'))
print(select.options)
for opt in select.options:
    data.append(opt.text)
print(data)

【讨论】:

    【解决方案2】:

    这也适用于打印整个列表

    basecss = '#ctl00_ContentPlaceHolder1_Estadocombo > option'
            events = self.driver_web_browser.find_elements_by_css_selector(basecss)
    
    
            for index, val in enumerate(events, 1):
                name = self.driver_web_browser.find_elements_by_css_selector("{}:nth-child({})".format( basecss,index))
                print(index,val.text)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      相关资源
      最近更新 更多