Ale*_*ndr 92 python selenium webdriver selenium-webdriver findelement
启动功能时
def run(driver_path):
driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://tproger.ru/quiz/real-programmer/')
button = driver.find_element_by_class_name("quiz_button")
button.click()
run(driver_path)
Run Code Online (Sandbox Code Playgroud)
我收到这样的错误:
def run(driver_path):
driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://tproger.ru/quiz/real-programmer/')
button = driver.find_element_by_class_name("quiz_button")
button.click()
run(driver_path)
Run Code Online (Sandbox Code Playgroud)
...但我不明白为什么。
我正在为我的 Chrome 版本使用最新版本的WebDriver 。我不知道为什么我得到
<ipython-input-27-c5a7960e105f>:6: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
driver = webdriver.Chrome(executable_path=driver_path)
<ipython-input-27-c5a7960e105f>:10: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
button = driver.find_element_by_class_name("quiz_button")
Run Code Online (Sandbox Code Playgroud)
...当文档中存在该命令时。
Deb*_*anB 203
这个错误信息...
DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
Run Code Online (Sandbox Code Playgroud)
...意味着这些find_element_by_*命令在最新的 Selenium Python 库中已被弃用。
正如AutomatedTester 提到的:这个DeprecationWarning反映了关于简化跨语言 API 的决定所做的更改,并且做到了这一点。
相反,你必须使用find_element(). 举个例子:
您必须包含以下导入内容
Run Code Online (Sandbox Code Playgroud)from selenium.webdriver.common.by import By
使用class_name:
button = driver.find_element_by_class_name("quiz_button")
Run Code Online (Sandbox Code Playgroud)
需要替换为:
button = driver.find_element(By.CLASS_NAME, "quiz_button")
Run Code Online (Sandbox Code Playgroud)
除此之外,您还必须更改以下内容:
使用id:
element = find_element_by_id("element_id")
Run Code Online (Sandbox Code Playgroud)
需要替换为:
element = driver.find_element(By.ID, "element_id")
Run Code Online (Sandbox Code Playgroud)
使用name:
element = find_element_by_name("element_name")
Run Code Online (Sandbox Code Playgroud)
需要替换为:
element = driver.find_element(By.NAME, "element_name")
Run Code Online (Sandbox Code Playgroud)
使用link_text:
element = find_element_by_link_text("element_link_text")
Run Code Online (Sandbox Code Playgroud)
需要替换为:
element = driver.find_element(By.LINK_TEXT, "element_link_text")
Run Code Online (Sandbox Code Playgroud)
使用partial_link_text:
element = find_element_by_partial_link_text("element_partial_link_text")
Run Code Online (Sandbox Code Playgroud)
需要替换为:
element = driver.find_element(By.PARTIAL_LINK_TEXT, "element_partial_link_text")
Run Code Online (Sandbox Code Playgroud)
使用tag_name:
element = find_element_by_tag_name("element_tag_name")
Run Code Online (Sandbox Code Playgroud)
需要替换为:
element = driver.find_element(By.TAG_NAME, "element_tag_name")
Run Code Online (Sandbox Code Playgroud)
使用css_selector:
element = find_element_by_css_selector("element_css_selector")
Run Code Online (Sandbox Code Playgroud)
需要替换为:
element = driver.find_element(By.CSS_SELECTOR, "element_css_selector")
Run Code Online (Sandbox Code Playgroud)
使用xpath:
element = find_element_by_xpath("element_xpath")
Run Code Online (Sandbox Code Playgroud)
需要替换为:
element = driver.find_element(By.XPATH, "element_xpath")
Run Code Online (Sandbox Code Playgroud)
注意:如果您要通过搜索和替换来实现上述更改,则需要对 执行相同的操作find_elements_*,即 的复数形式find_element_*。
您可能还会发现此升级指南很有用,因为它涵盖了升级时可能需要进行的一些其他不相关的更改:升级到 Selenium 4
Mor*_*ori 10
@DebanjanB 提到并解释了新结构。另外,最好使用这些行:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
s = Service('C:/Users/.../chromedriver.exe')
driver = webdriver.Chrome(service=s)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
128400 次 |
| 最近记录: |