Я очищаю веб-сайт с 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 строк кода (без учета юнит-тестов, документации и т. Д. c ..) только для того, чтобы справиться с этим неправильным, а не с общим поведением c.
Плюс, очистка этого Веб-сайт является частью более крупного проекта, в котором только этот конкретный c веб-сайт использует такие CSS селекторы, поэтому большое количество усилий для одного веб-сайта на 10 доставляет мне неудобство.
Я мог бы использовать что-то вроде find_element_by_css_selector('.foo > input:nth-child(2)')
, но это довольно сложно, и любое небольшое обновление DOM может сломать скребок.
Есть ли какой-нибудь clean способ обработки недопустимых css селекторов через Selenium с использованием find_element_by_css_selector
или я обречен использовать XPATH для этого сайта?