如何使用Python Selenium Web驱动程序扩展任何网站中存在的所有隐藏字段(一步到位)

ltskdhd1  于 2023-10-21  发布在  Python
关注(0)|答案(1)|浏览(100)

我试图扩大所有隐藏领域目前在任何特定的网页的网站,但我能够做一个又一个。此外,此代码片段并不适用于任何网站。
如何编写一个通用的代码,可以扩展任何网站的特定网页的所有隐藏字段?
示例网站的代码片段:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

service = Service(executable_path='chromedriver.exe')
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)

driver.get('https://kpmg.com/xx/en/home/about/offices.html')

driver.find_element(By.XPATH, "//*[@id='country24-accordion']").click()

隐藏字段图像示例:

dauxcl2d

dauxcl2d1#

这是一个有趣的问题。在继续之前,值得考虑一下是否可以使用任何其他替代方法来访问可扩展部分的内容。例如,您可以访问 accordion 部分中的文本,而无需扩展它们(尽管它可能需要格式化),例如:

elements = driver.find_elements_by_class_name(".accordion-collapse")

for element in elements:
    print(element.get_attribute("innerText"))

好,继续:您正在访问的页面使用JavaScript来强制一次只展开一个可折叠部分。而且Selenium只能按顺序执行点击动作;它不允许你同时点击或展开所有的 accordion 部分。这是因为Selenium主要用于模拟用户操作,而不是像JavaScript那样更直接地操作DOM。
但是,您可以从Selenium中调用JavaScript来一次展开所有部分。如果每次展开和折叠accordion部分时都检查DOM中的accordion元素,您会注意到style属性发生了变化。
当您单击折叠 accordion 时,样式属性将更改为:

style="display: none;"

当您再次单击展开时,它将发生如下变化:

style="display: block;"

因此,你可以使用JavaScript修改上述属性值,使所有的accordion元素同时展开。您可以在浏览器控制台中尝试以下操作:

var accordionContents = document.querySelectorAll('.accordion-collapse');

accordionContents.forEach(function(content) {
    content.style.display = 'block';
});
  • 注意:aria-expanded属性值也会随着展开/折叠而变化,但对于展开 accordion 并不是强制性的,如图所示。但是为了完整性,也值得更改这些值。*

现在在Selenium中应用上述内容,您可以添加以下内容:

js_code = ```
    var accordionContents = document.querySelectorAll('.accordion-collapse');

    accordionContents.forEach(function(content) {
    content.style.display = 'block';
});```

driver.execute_script(js_code)

希望能帮上忙!

相关问题