我一直在构建一个搜刮器,效果很好,但需要我手动展开隐藏数据才能成功搜刮。我检查了网页的源代码,数据位于3个不同的手风琴容器中。
有一个可点击的表头横幅,其中包含一些同样被刮除的表头元素。我已经尝试了所有可能包含可点击元素的表头内的xpath,以及像这样的代码。
driver.find_element_by_xpath('//*[@id="income-statement-accordion"]/thead/tr/th[1]').click
但没有任何可能的xpath组合可以扩展表格。 当我查看源码时,当我点击表头时,唯一出现变化的源码如下所示:
<table _ngcontent-ng-lseg-c34="" class="full-width income-statement swipable-table accordion-container" id="income-statement-accordion"> == $0
的变化(我不知道这其中的重要性。== $0
?):
<table _ngcontent-ng-lseg-c34="" class="full-width income-statement swipable-table accordion-container active-accordion" id="income-statement-accordion">
我在这里看过一个类似的问题。在python中用硒打开一个手风琴。. 然而,试图采取类似的措施,不会做任何事情,虽然承认提交没有错误,并返回 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没有将它们归类为 "可交互"。