我正在尝试使用Python和Selenium在这些按钮上单击“是”或“否”:
这些按钮的HTML如下:
我尝试根据XPath进行选择:
isbnButton = browser.find_elements_by_xpath("//a[@data-toggle='haveisbn'")
是朋友建议的,但给我一个错误,指出该字符串不是有效的XPath表达式。我对XPath几乎一无所知,并且在我等待答案的同时正在做一个教程,但是我希望有人可以指导我正确的方向。
我最初尝试的是:
dontHaveISBN = driver.find_elements_by_class_name('btn radio btn-radio btn-primary not-active w-100')
dontHaveISBN[1].click()
但是那没有识别任何元素。
您将如何选择并单击这些按钮?
答案 0 :(得分:1)
您可以再次尝试使用xpath(尝试从源代码中完全复制xpath):
dontHaveISBN=driver.find_element_by_xpath('xpath_here')
dontHaveISBN.click()
答案 1 :(得分:1)
您可以尝试使用以下代码:
wait = WebDriverWait(driver, 10)
yes_button = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, 'Yes')))
yes_button.click()
使用链接文本比 XPATH 更好。
如果只想使用xpath,那就应该是:
//a[text()='Yes']
请注意,您必须导入以下内容:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
如果您想了解有关xpath的更多信息,可以参考此link
希望这会有所帮助。
答案 2 :(得分:1)
在xpath
中尝试忘记结束]
,这就是为什么它无效的原因。但是此定位器还有一个更大的问题:它也与NO
按钮匹配。
在class_name
尝试中,您给多个类作为参数,find_elements_by_class_name
仅接收了一个类作为参数。
data-id
属性似乎是唯一的,您可以使用它
# Yes button
driver.find_element_by_css_selector('[data-id="1"]')
# No button
driver.find_element_by_css_selector('[data-id="0"]')
# using xpath
driver.find_element_by_xpath('//a[@data-id="1"]')
或使用文字
driver.find_element_by_link_text('Yes')
driver.find_element_by_xpath('//a[text()="Yes"]')