python-3.x Selenium无法在源HTML中找到元素

2nc8po8w  于 2023-03-20  发布在  Python
关注(0)|答案(2)|浏览(130)

给定:

  • Python 3.11.2语言
  • selenium 4.8.2
  • Chrome作为浏览器引擎

我希望在HTML中找到以下内容:

<input type="text" class="datepicker apex-item-text apex-item-datepicker hasDatepicker" size="32" value="15-MAR-2023">

我试过这个:

browser.find_element(By.CLASS_NAME, 'datepicker apex-item-text apex-item-datepicker hasDatepicker')

以及

browser.find_element(By.CSS_SELECTOR, 'input[type="text"][class="datepicker apex-item-text apex-item-datepicker hasDatepicker"]')

但在这两种情况下我都得到

Unable to locate element: {"method":"css selector" ...

两种方法都是...可能对于基于“class_name”的搜索,这是一个bug(?)。
有什么办法让它运作起来吗?
先谢谢你了。

31moq8wy

31moq8wy1#

尝试按如下方式使用XPATH:

browser.find_element(By.XPATH, "//input[contains(@class,'datepicker apex-item-text apex-item-datepicker hasDatepicker')]")

如果页面需要花时间加载元素,您可以尝试使用waits

WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.XPATH, "//input[contains(@class,'datepicker apex-item-text apex-item-datepicker hasDatepicker')]")))

导入waits所需的语句:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
bxgwgixi

bxgwgixi2#

几件事

  1. By.CLASS_NAME只接受一个类名,但您已将其发送到4。
(By.CLASS_NAME, 'datepicker apex-item-text apex-item-datepicker hasDatepicker')

“日期选择器”、“顶点项目文本”、“顶点项目日期选择器”、“具有日期选择器”均为类名。
您可以将其转换为CSS选择器,

(By.CSS_SELECTOR, '.datepicker.apex-item-text.apex-item-datepicker.hasDatepicker')

CSS选择器语法中的.表示一个类名,因此它查找所有四个类名。
1.请不要将类字符串转换为直接的字符串比较,例如。

[class="datepicker apex-item-text apex-item-datepicker hasDatepicker"]

这使得CSS选择器在指定多个类并使它们以任意顺序排列等方面失去了很多灵活性。请参见第1点中的CSS选择器。
我的猜测是,至少有一个类在该元素中并不总是存在。也许在某些情况下,它是一个不同的颜色或禁用,等等,其中的类并不总是相同的。看看该INPUT的不同状态,找到总是存在的类,并创建一个CSS选择器,只有这些类,例如input.datepicker.apex-item-datepicker作为一个猜测。

相关问题