如何使用Python和Selenium选择此按钮?
我尝试使用Python和Selenium在以下按钮上单击是或否: 这些按钮的HTML如下所示: 我尝试根据XPath进行选择:如何使用Python和Selenium选择此按钮?,python,python-3.x,selenium,xpath,Python,Python 3.x,Selenium,Xpath,我尝试使用Python和Selenium在以下按钮上单击是或否: 这些按钮的HTML如下所示: 我尝试根据XPath进行选择: isbnButton = browser.find_elements_by_xpath("//a[@data-toggle='haveisbn'") 正如一位朋友所建议的,但它给了我一个错误,即字符串不是有效的XPath表达式。我对XPath几乎一无所知,现在正在做一个教程,等待答案,但我希望有人能指导我正确的方向 我最初尝试的是: dontHaveISBN =
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()
但这并没有识别出任何元素
如何选择并单击这些按钮?您可以再次尝试使用xpath(尝试从源代码中完全复制xpath):
您可以再次尝试使用xpath(尝试完全复制源代码中的xpath):
您可以尝试使用以下代码:
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的信息,可以参考以下内容
希望这会有所帮助。您可以尝试使用以下代码:
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的信息,可以参考以下内容
希望这会有所帮助。在
xpath
中,如果您忘记了结束语]
,这就是它无效的原因。但是这个定位器有一个更大的问题:它也匹配NO
按钮
在class\u name
中,尝试将多个类作为参数,find\u elements\u by\u class\u name
只接收一个类作为参数
数据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"]')
在
xpath
中,尝试忘记关闭]
,这就是它无效的原因。但是这个定位器有一个更大的问题:它也匹配NO
按钮
在class\u name
中,尝试将多个类作为参数,find\u elements\u by\u class\u name
只接收一个类作为参数
数据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"]')
发布你的网址。更好理解。发布你的URL。更好理解。如何从源代码复制xpath?我对XPath几乎一无所知。我只是下载了Firebug并找到了答案。谢谢你给我指明了正确的方向!!直到你这么说,我才意识到可以复制精确的xpath。@Oxymoronica:使用FireBug/firePath生成的xpath不是一个好的实践。作为初学者,您可能更喜欢这样,但您应该知道如何编写自己的css选择器或xpath?我对XPath几乎一无所知。我只是下载了Firebug并找到了答案。谢谢你给我指明了正确的方向!!直到你这么说,我才意识到可以复制精确的xpath。@Oxymoronica:使用FireBug/firePath生成的xpath不是一个好的实践。作为初学者,您可能更喜欢这样,但您应该知道如何编写自己的css选择器或xpath。