首页 > 解决方案 > 使用 Selenium+python 从链接列表中提取 HTML 代码

问题描述

我正在尝试从链接列表中获取多个页面源。我的想法是使用 webdriver 打开链接,将页面源保存在变量中,然后返回继续下一个链接。但由于某种原因,python 告诉我一个元素没有附加到页面文档。有什么解决办法吗?提前致谢!

browserFut = webdriver.Chrome(PATH)
browserFut.get(link)

page_sources = []
links = browserFut.find_element_by_xpath('//div[@class="dml-page-loader dml-page-loader--pb"]').find_elements_by_tag_name('a')
for link in links:
    link.click()
    page_sources += [browserFut.page_source]
    browserFut.back()
    time.sleep(1)

标签: pythonseleniumselenium-webdriverbeautifulsoup

解决方案


for我们需要在循环中再次分配链接。尝试这样的事情。

length = len(browserFut.find_element_by_xpath('//div[@class="dml-page-loader dml-page-loader--pb"]').find_elements_by_tag_name('a'))
for i in range(length):
    links = browserFut.find_element_by_xpath('//div[@class="dml-page-loader dml-page-loader--pb"]').find_elements_by_tag_name('a')
    links[i].click()
    page_sources += [browserFut.page_source]
    browserFut.back()
    time.sleep(1)

如果链接在新选项卡中打开,则单击后:

length = len(browserFut.find_element_by_xpath('//div[@class="dml-page-loader dml-page-loader--pb"]').find_elements_by_tag_name('a'))
for i in range(length):
    links = browserFut.find_element_by_xpath('//div[@class="dml-page-loader dml-page-loader--pb"]').find_elements_by_tag_name('a')
    links[i].click()
    handles = driver.window_handles
    browserFut.switch_to.window((handles[1]))
    page_sources += [browserFut.page_source]
    browserFut.close()
    browserFut.switch_to.window(handles[0])
    time.sleep(1)

推荐阅读