单击带有硒的特定按钮

时间:2020-03-26 12:31:02

标签: python selenium xpath

Python,Selenium,XPath。

我想打开此页面https://www.tesla.com/en_gb/models/design#battery,然后使用python以编程方式单击性能按钮。

这是我要单击的内容: image showing what I want to click on

我的问题是正确描述了按钮。也许我对xpath的理解不正确,或者有一种更好的方法指向所需的元素。

这就是我尝试过的

from selenium import webdriver
browser = webdriver.Chrome('../Downloads/chromedriver.exe')
browser.get('https://www.tesla.com/en_gb/models/design#battery')
A = browser.find_element_by_xpath('/html/body/div/div/main/div/div/div[2]/div[5]/div/div[1]/div/div[2]/div[2]/div[1]')
A.click();

我收到此错误

Traceback (most recent call last):
File "C:\Users\User\Desktop\666.py", line 4, in <module>
A = browser.find_element_by_xpath('/html/body/div/div/main/div/div/div[2]/div[5]/div/div[1]/div/div[2]/div[2]/div[1]')
File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
'value': value})['value']
File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div/div/main/div/div/div[2]/div[5]/div/div[1]/div/div[2]/div[2]/div[1]"}
(Session info: chrome=80.0.3987.149)

完整xpath {/ html / body / div / div / main / div / div / div [2] / div [5] / div / div 1 / div / div [2] / div [2 ] / div 1}

我要点击的元素的

html

<div role="button" tabindex="0" class="group--options_block m3-animate--all" aria-label="Performance"><div class="group--options_block_title"><span><p class="group--options_block--name text-loader--content" tabindex="-1">Performance</p></span><p class="group--options_block-container_price text-loader--content price-not-included">£95,800</p></div></div>

im复制并粘贴所需元素的完整xpath。这不是正确的方法吗?

编辑: 如果可行,范围应该是367而不是379

2 个答案:

答案 0 :(得分:1)

使用以下xpath

//div[@class='group--options_block_title']/span/p

OR

//p[contains(text(),'Performance')]

或CSS选择器

div[aria-label='Performance']

别忘了引入ImplicitExplicit,以免脚本中出现同步问题。 reference

答案 1 :(得分:0)

请有时参考以下代码,有时网站加载时间太长,因此如果您在解决方案中使用WebDriverWait,那将是很好的选择。使用Abs XPath也不是一个好习惯。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time
driver = webdriver.Chrome(executable_path=r"C:\New folder\chromedriver.exe")

driver.get('https://www.tesla.com/en_gb/models/design#battery')
wait = WebDriverWait(driver,30)
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//p[contains(text(),'Performance')]")))
print element.text
element.click()
element1 = wait.until(EC.presence_of_element_located((By.XPATH, "//span[contains(text(),'367')]")))
print element1.text

输出: enter image description here