Python selenium webdriver 扩展 accordion-container(取两个)
Python selenium webdriver expanding accordion-container (take two)
我一直在构建一个运行良好的抓取器,但需要我手动展开隐藏数据才能成功抓取它。我检查了网页源代码,数据位于 3 个不同的手风琴容器中。
有一个 table header 横幅可点击,其中包含许多 header 元素,这些元素也被 抓取 。我已经尝试了 header 中所有可能包含可点击元素的 xpath 以及如下代码:
driver.find_element_by_xpath('//*[@id="income-statement-accordion"]/thead/tr/th[1]').click
但没有可能的 xpath 组合扩展 table。
当我查看源代码时,当我单击 header 时,唯一出现变化的源代码如下
<table _ngcontent-ng-lseg-c34="" class="full-width income-statement swipable-table accordion-container" id="income-statement-accordion"> == [=13=]
对此的更改(我不确定 == [=16=]
的重要性?):
<table _ngcontent-ng-lseg-c34="" class="full-width income-statement swipable-table accordion-container active-accordion" id="income-statement-accordion">
我在这里看过一个类似的问题:。然而,尝试对此做类似的尝试并没有做任何事情,尽管确实提交没有错误并且 returns none
:
driver.execute_script("document.getElementById('income-statement-accordion').class='full-width income-statement swipable-table accordion-container active-accordion';")
我错过了什么?
这似乎有效
elements = driver.find_elements_by_xpath("//span[contains(@class, 'accordion-toggler')]")
for element in elements:
driver.execute_script("arguments[0].click();", element)
这将扩展 所有 个手风琴部分。
如果您只想定位个别版块
element = driver.find_element_by_xpath("//table[@id='income-statement-accordion']//span[contains(@class, 'accordion-toggler')]")
driver.execute_script("arguments[0].click();", element)
我们需要使用 javascript 来点击元素,因为 selenium 不会将它们分类为 "interactable"。
我一直在构建一个运行良好的抓取器,但需要我手动展开隐藏数据才能成功抓取它。我检查了网页源代码,数据位于 3 个不同的手风琴容器中。
有一个 table header 横幅可点击,其中包含许多 header 元素,这些元素也被 抓取 。我已经尝试了 header 中所有可能包含可点击元素的 xpath 以及如下代码:
driver.find_element_by_xpath('//*[@id="income-statement-accordion"]/thead/tr/th[1]').click
但没有可能的 xpath 组合扩展 table。 当我查看源代码时,当我单击 header 时,唯一出现变化的源代码如下
<table _ngcontent-ng-lseg-c34="" class="full-width income-statement swipable-table accordion-container" id="income-statement-accordion"> == [=13=]
对此的更改(我不确定 == [=16=]
的重要性?):
<table _ngcontent-ng-lseg-c34="" class="full-width income-statement swipable-table accordion-container active-accordion" id="income-statement-accordion">
我在这里看过一个类似的问题:none
:
driver.execute_script("document.getElementById('income-statement-accordion').class='full-width income-statement swipable-table accordion-container active-accordion';")
我错过了什么?
这似乎有效
elements = driver.find_elements_by_xpath("//span[contains(@class, 'accordion-toggler')]")
for element in elements:
driver.execute_script("arguments[0].click();", element)
这将扩展 所有 个手风琴部分。
如果您只想定位个别版块
element = driver.find_element_by_xpath("//table[@id='income-statement-accordion']//span[contains(@class, 'accordion-toggler')]")
driver.execute_script("arguments[0].click();", element)
我们需要使用 javascript 来点击元素,因为 selenium 不会将它们分类为 "interactable"。