Python 用selenium单击特定按钮

Python 用selenium单击特定按钮,python,selenium,xpath,Python,Selenium,Xpath,Python、Selenium、XPath 我想打开这个页面,用python编程单击performance按钮 以下是我想点击的内容: 我的问题是正确描述按钮。可能我没有正确理解xpath,或者有更好的方法指向所需的元素 这是我试过的 from selenium import webdriver browser = webdriver.Chrome('../Downloads/chromedriver.exe') browser.get('https://www.tesla.com/en_gb

Python、Selenium、XPath

我想打开这个页面,用python编程单击performance按钮

以下是我想点击的内容:

我的问题是正确描述按钮。可能我没有正确理解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)
回溯(最近一次呼叫最后一次):
文件“C:\Users\User\Desktop\666.py”,第4行,在
A=browser。通过xpath('/html/body/div/div/main/div/div/div[2]/div[5]/div/div/div[1]/div/div/div[2]/div[2]/div[1]'查找元素
文件“C:\Users\User\AppData\Local\Programs\Python37-32\lib\site packages\selenium\webdriver\remote\webdriver.py”,第394行,按xpath查找元素
返回self.find_元素(by=by.XPATH,value=XPATH)
文件“C:\Users\User\AppData\Local\Programs\Python37-32\lib\site packages\selenium\webdriver\remote\webdriver.py”,第978行,在find\u元素中
'value':value})['value']
文件“C:\Users\User\AppData\Local\Programs\Python37-32\lib\site packages\selenium\webdriver\remote\webdriver.py”,执行中第321行
self.error\u handler.check\u响应(响应)
文件“C:\Users\User\AppData\Local\Programs\Python37-32\lib\site packages\selenium\webdriver\remote\errorhandler.py”,第242行,在check\u响应中
引发异常类(消息、屏幕、堆栈跟踪)
selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“方法”:“xpath”,“选择器”:“/html/body/div/div/div/main/div/div[2]/div[5]/div/div/div[1]/div/div/div[2]/div[2]/div[1]”
(会话信息:chrome=80.0.3987.149)
完整xpath{/html/body/div/div/main/div/div/div[2]/div[5]/div/div/div/div[2]/div[2]/div}

我想点击的元素的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>

性能

.95800英镑

我正在复制和粘贴我想要的元素的完整xpath。这不是正确的方法吗

编辑: 如果有效,范围应该是367而不是379,请使用以下xpath

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

或CSS选择器

div[aria-label='Performance']

不要忘记引入
隐式
显式
等待,以避免脚本中出现同步问题

请参考下面的代码,有时网站加载时间太长,所以如果您在解决方案中使用WebDriverWait,那就太好了。使用absxpath也不是一个好的实践

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
输出:

这没有返回错误,但我没有看到我所期望的效果单击“性能”按钮与我的旧按钮不同,但使用了您建议的新XPath。实际上,没有人让页面处于性能模式。我尝试了这个方法,它在我这方面绝对可以正常工作。
A=driver。通过\u xpath(“//p[contains(text(),'performance')]”)A查找\u元素。click()
单击后是否在脚本中关闭浏览器?是否确实单击了性能。范围读数是367还是379?这不起作用。如果单击performance,它将打印367mi。不是379请找到更新的解决方案。现在工作正常了。也请点击投票按钮,并接受答案,一旦你们验证它从你们的结束
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