使用Selenium+python从链接列表中提取HTML代码

2024-10-02 22:26:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从链接列表中获取多个页面源。我的想法是使用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)

Tags: 元素列表by源代码链接pagelink页面
3条回答

我们需要在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)

感谢为我提供建议的用户。最后,有些东西起了作用。唯一的区别是我的链接。似乎我是采取了一些额外的链接,把我发送到同一页

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

在第二个循环中,元素变得过时,所以您必须重新定义它们

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

相关问题 更多 >