Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python和Selenium选择此按钮?_Python_Python 3.x_Selenium_Xpath - Fatal编程技术网

如何使用Python和Selenium选择此按钮?

如何使用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 =

我尝试使用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()
但这并没有识别出任何元素


如何选择并单击这些按钮?

您可以再次尝试使用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。