无法在 Selenium 中定位元素(Python)

新手上路,请多包涵

我尝试在 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()

输出:

  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。

原文由 Amaan001 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 562
2 个回答

根据您的评论,您使用的是 Selenium WebDriver 版本 4.0.0a5,但它并不稳定。这些版本之间可能会添加/删除功能。您可以切换回 3.141.59 并尝试一下:

在此处输入图像描述

 driver = webdriver.Chrome(executable_path="C:\New folder\chromedriver.exe",chrome_options=chrome_options)
url = 'http://www.youtube.com'
driver.get(url)
driver.maximize_window()
wait = WebDriverWait(driver, 20)

element = wait.until(EC.presence_of_element_located((By.XPATH, "//form[@id='search-form']//div[@id='container']//div[@id='search-input']//input")))

actionChains = ActionChains(driver)
actionChains.move_to_element(element).click().perform()
actionChains.move_to_element(element).send_keys("Test",Keys.RETURN).perform()

注意: 请将以下导入添加到您的解决方案中

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

原文由 SeleniumUser 发布,翻译遵循 CC BY-SA 4.0 许可协议

这个错误信息…

  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 Release Candidate 1 更改日志,其中提到:

指定“find_elementby* …”警告是弃用警告 (#9700)


解决方案

而不是 find_element_by_* 你必须使用 find_element() 。举个例子:

您需要添加以下导入:

>  from selenium.webdriver.common.by import By
>
> ```

- 使用 _`xpath`_ :


driver.find_element_by_xpath(“//*[@id=‘search’]”).click()



  需要替换为:


driver.find_element(By.XPATH, “//*[@id=‘search’]”).click()



同样,您还必须考虑以下更改:

- 使用 `class_name` :


element = find_element_by_class_name(“element_class_name”)



  需要替换为:


element = driver.find_element(By.CLASS_NAME, “element_class_name”)


- 使用 `id` :


element = find_element_by_id(“element_id”)



  需要替换为:


element = driver.find_element(By.ID, “element_id”)


- 使用 `name` :


element = find_element_by_name(“element_name”)



  需要替换为:


element = driver.find_element(By.NAME, “element_name”)


- 使用 `link_text` :


element = find_element_by_link_text(“element_link_text”)



  需要替换为:


element = driver.find_element(By.LINK_TEXT, “element_link_text”)


- 使用 `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”)


- 使用 `tag_name` :


element = find_element_by_tag_name(“element_tag_name”)



  需要替换为:


element = driver.find_element(By.TAG_NAME, “element_tag_name”)


- 使用 `css_selector` :


element = find_element_by_css_selector(“element_css_selector”)



  需要替换为:


element = driver.find_element(By.CSS_SELECTOR, “element_css_selector”)

”`


TL;博士

您可以在以下位置找到一些相关的详细讨论:

原文由 undetected Selenium 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏