硒 Python document.getElementsByClassName()
Selenium Python document.getElementsByClassName()
我将 Selenium 与 Python3 结合使用来自动将数据输入网站。
我已经尝试到处寻找如何通过 class 处理 select 一个元素,如果有多个元素,但我无法弄清楚如何 select 手风琴切换 [1 ]. selenium 没有任何反应,但它在任何浏览器上都能正常工作。另外,有没有办法只使用常规的 javascript 或 jquery 命令?:
accordion=find_element_by_class("accordion-toggle"[1])
accordion.click()
#otheraccordion=find_element_by_css_selector("#AdvancedAddress > div.accordion-heading.in > div.accordion-toggle > span.accordionExpandCollapse")
#otheraccordion.click()
StreetNameField=driver.find_element_by_id("Advanced_FindMyParcel_PropertyStreetName")
StreetNameField.send_keys("Sherman")
ZipField=driver.find_element_by_id("Advanced_FindMyParcel_PropertyZip")
ZipField.send_keys("90201")
ZipButton=driver.find_element_by_id("btnSearchFindMyParcels")
ZipButton.click()
您正在寻找 find_element(s)_by_css_selector
- reference here - 使用 css 前缀 '.classname` 表示 class.
例如寻找
<div class='theClass'>
driver.find_elements_by_css_selector('.theClass')
您还可以使用 By
语法:
driver.find_elements(By.CSS_SELECTOR, '.theClass')
编辑
看来问题可能更多是 Clicking
元素,而不是找到它。
- 确保元素可见
- 对于 Chrome,您可能需要在单击之前模拟将鼠标悬停在元素上 - 请参阅 Actions / ActionChains MoveToElement 将鼠标悬停在元素上。
- 对于 IE,您可能需要确保浏览器/框架在元素单击之前获得焦点 - 您可能需要应用像 one of these 这样的 hack。
您实际上可以通过 execute_script()
调用来使用 document.getElementsByClassName()
:
driver.execute_script("document.getElementsByClassName('accordion-toggle')[0].click();")
但我不会为了这样一个简单的任务而去执行 javascript。使用 find_element_by_class_name()
:
更容易定位元素
accordion = driver.find_element_by_class_name('accordion-toggle')
accordion.click()
除了@alecxe 的回应,我还建议使用函数 find_elements_by_class_name
而不是 find_element_by_class_name
以防多个元素具有相同的 class 名称。
accordion = driver.find_elements_by_class_name('accordion-toggle')[1] # Selects second element
accordion.click()
使用 find_element_by_class_name
将 return 仅具有该 class 名称的第一个元素。
我将 Selenium 与 Python3 结合使用来自动将数据输入网站。 我已经尝试到处寻找如何通过 class 处理 select 一个元素,如果有多个元素,但我无法弄清楚如何 select 手风琴切换 [1 ]. selenium 没有任何反应,但它在任何浏览器上都能正常工作。另外,有没有办法只使用常规的 javascript 或 jquery 命令?:
accordion=find_element_by_class("accordion-toggle"[1])
accordion.click()
#otheraccordion=find_element_by_css_selector("#AdvancedAddress > div.accordion-heading.in > div.accordion-toggle > span.accordionExpandCollapse")
#otheraccordion.click()
StreetNameField=driver.find_element_by_id("Advanced_FindMyParcel_PropertyStreetName")
StreetNameField.send_keys("Sherman")
ZipField=driver.find_element_by_id("Advanced_FindMyParcel_PropertyZip")
ZipField.send_keys("90201")
ZipButton=driver.find_element_by_id("btnSearchFindMyParcels")
ZipButton.click()
您正在寻找 find_element(s)_by_css_selector
- reference here - 使用 css 前缀 '.classname` 表示 class.
例如寻找
<div class='theClass'>
driver.find_elements_by_css_selector('.theClass')
您还可以使用 By
语法:
driver.find_elements(By.CSS_SELECTOR, '.theClass')
编辑
看来问题可能更多是 Clicking
元素,而不是找到它。
- 确保元素可见
- 对于 Chrome,您可能需要在单击之前模拟将鼠标悬停在元素上 - 请参阅 Actions / ActionChains MoveToElement 将鼠标悬停在元素上。
- 对于 IE,您可能需要确保浏览器/框架在元素单击之前获得焦点 - 您可能需要应用像 one of these 这样的 hack。
您实际上可以通过 execute_script()
调用来使用 document.getElementsByClassName()
:
driver.execute_script("document.getElementsByClassName('accordion-toggle')[0].click();")
但我不会为了这样一个简单的任务而去执行 javascript。使用 find_element_by_class_name()
:
accordion = driver.find_element_by_class_name('accordion-toggle')
accordion.click()
除了@alecxe 的回应,我还建议使用函数 find_elements_by_class_name
而不是 find_element_by_class_name
以防多个元素具有相同的 class 名称。
accordion = driver.find_elements_by_class_name('accordion-toggle')[1] # Selects second element
accordion.click()
使用 find_element_by_class_name
将 return 仅具有该 class 名称的第一个元素。