【发布时间】:2020-06-05 18:28:20
【问题描述】:
我正在用 Selenium / Python3 抓取一个网站,该网站只使用了无效的选择器,例如:
<input id="egg:bacon:SPAM" type="text"/>
<input id="egg:sausages:SPAM:SPAM" type="text"/>
(无效部分为egg:bacon:SPAM & egg:sausages:SPAM:SPAM)
我确实尝试使用以下方式选择这些标签:
driver.find_element_by_css_selector('input#egg:bacon:SPAM')
但我当然会得到selenium.common.exceptions.InvalidSelectorException
我也尝试过使用 xpath 来获取我的标签,它适用于:
driver.find_element_by_xpath('//input[@id="egg:bacon:SPAM"]')
但是我的代码是基于一个基于 CSS 选择器的自制库。添加 XPATH 支持需要添加大约 200 行代码(不包括单元测试、文档等),只是为了处理这种错误而不是通用行为。
另外,抓取这个网站是一个更大的项目的一部分,只有这个特定的网站使用那种 CSS 选择器,在 10 上为单个网站付出如此多的努力让我感到不舒服。
我可以使用 find_element_by_css_selector('.foo > input:nth-child(2)') 之类的东西,但它非常棘手,并且 DOM 上的任何小更新都可能破坏刮板。
是否有任何 clean 方法可以通过 Selenium 使用 find_element_by_css_selector 处理无效的 css 选择器,或者我注定要为这个网站使用 XPATH?
【问题讨论】:
标签: python python-3.x selenium css-selectors