我尝试在 Chrome 中使用 Selenium,但无法在页面上找到元素。我尝试使用链接文本、XPath 和完整 XPath,但只有一个错误,并且没有单击该元素。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver= webdriver.Chrome()
driver.get("https://www.youtube.com/")
print(driver.title)
driver.find_element_by_xpath("//*[@id='search']").click()
Output:
UserWarning: find_element_by_* commands are deprecated. Please use find_element() instead
warnings.warn("find_element_by_* commands are deprecated. Please use find_element() instead")
我使用的是 ChromeDriver 81.0.4044.69 和浏览器版本 81.0.4044.113。
这个错误信息...
UserWarning: find_element_by_* commands are deprecated. Please use find_element() instead
warnings.warn("find_element_by_* commands are deprecated. Please use find_element() instead")
...意味着find_element_by_*
命令现在与最新 Selenium Python 库中的弃用警告相关联。
这一变化符合Selenium 4 候选发布版 1 变更日志 https://github.com/SeleniumHQ/selenium/blob/d6acda7c0254f9681574bf4078ff2001705bf940/py/CHANGES#L32其中提到:
指定“find_element_by_* ...”警告是弃用警告 (#9700)
Solution
代替find_element_by_*
你必须使用find_element()
。举个例子:
您需要添加以下导入:
from selenium.webdriver.common.by import By
-
Using xpath
:
driver.find_element_by_xpath("//*[@id='search']").click()
需要替换为:
driver.find_element(By.XPATH, "//*[@id='search']").click()
同样,您还必须考虑以下更改:
-
Using class_name
:
element = find_element_by_class_name("element_class_name")
需要替换为:
element = driver.find_element(By.CLASS_NAME, "element_class_name")
-
Using id
:
element = find_element_by_id("element_id")
需要替换为:
element = driver.find_element(By.ID, "element_id")
-
Using name
:
element = find_element_by_name("element_name")
需要替换为:
element = driver.find_element(By.NAME, "element_name")
-
Using link_text
:
element = find_element_by_link_text("element_link_text")
需要替换为:
element = driver.find_element(By.LINK_TEXT, "element_link_text")
-
Using partial_link_text
:
element = find_element_by_partial_link_text("element_partial_link_text")
需要替换为:
element = driver.find_element(By.PARTIAL_LINK_TEXT, "element_partial_link_text")
-
Using tag_name
:
element = find_element_by_tag_name("element_tag_name")
需要替换为:
element = driver.find_element(By.TAG_NAME, "element_tag_name")
-
Using css_selector
:
element = find_element_by_css_selector("element_css_selector")
需要替换为:
element = driver.find_element(By.CSS_SELECTOR, "element_css_selector")
tl; dr
您可以在以下位置找到一些相关的详细讨论:
- 拉取请求:指定“find_element_by_* ...”警告是弃用警告 https://github.com/SeleniumHQ/selenium/pull/9700
- Commit: 指定“find_element_by_* ...”警告是弃用警告 https://github.com/SeleniumHQ/selenium/pull/9700/commits/a31dad45097c70b8f7162039be0108d040771810
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)