Python> Selenium:在“登录”环境中基于文本文件中的链接进行Web爬取

兼容 ChromeDriver

该程序旨在完成以下任务:

  
      
  1. 自动登录网站;
  2.   
  3. 访问文本文件中的链接;
  4.   
  5. 从以此方式访问的每个页面中抓取数据;和
  6.   
  7. 通过print()输出所有抓取的数据。
  8.   

请跳到第2部分来查找问题区域,因为第1部分已经过测试可用于第1步。 :)

代码:

第1部分

from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()

driver.get("website1.com/home")

main_page = driver.current_window_handle 
time.sleep(5) 

##cookies
driver.find_element_by_xpath('//*[@id="CybotCookiebotDialogBodyButtonaccept"]').click() 
time.sleep(5)

driver.find_element_by_xpath('//*[@id ="google-login"]/span').click() 
for handle in driver.window_handles: 
    if handle != main_page: 
        login_page = handle 

driver.switch_to.window(login_page) 

with open('logindetails.txt','r') as file:
   for details in file:
        email,password = details.split(':')

        driver.find_element_by_xpath('//*[@id ="identifierId"]').send_keys(email) 
driver.find_element_by_xpath('//span[text()="Next"]').click()

time.sleep(5)
driver.find_element_by_xpath('//input[@type="password"]').send_keys(password) 

driver.find_element_by_xpath('//span[text()="Next"]').click() 
driver.switch_to.window(main_page) 
time.sleep(5)

第2部分

  

alllinks.txt 中,我们有以下网站:

     


•website1.com/otherpage/page1   
•website1.com/otherpage/page2   
•website1.com/otherpage/page3   
  

with open('alllinks.txt','r') as directory:
    for items in directory:
    driver.get(items)
    time.sleep(2)
    elements = driver.find_elements_by_class_name('data-xl')
    for element in elements:
            print ([element])
    time.sleep(5)


driver.quit()

结果:

[Done] exited with code=0 in 53.463 seconds

...并且零输出


问题:

  

该元素的位置已经过验证,怀疑 windows 与驱动程序未抓取的原因有关。

欢迎所有输入,并深表感谢。 :)

zht_410728 回答:Python> Selenium:在“登录”环境中基于文本文件中的链接进行Web爬取

driver.get()中使用的URL必须包含协议(即https://)。

driver.get('website1.com/otherpage/page1')只会引发异常。

,

事实证明,我错过了包含“ iframe”的功能,这对于无法通过窗口直接选择的元素非常重要。

iframe = driver.find_element_by_xpath("//iframe[@class='LegacyFeature__Iframe-tasygr-1> bFBhBT']")
driver.switch_to.frame(iframe)

切换到目标 iframe 后,我们运行代码以查找并打印所需的元素。

time.sleep(1)

elements = driver.find_elements_by_class_name('data-xl')
for element in elements:
    print(element.text)

登录后,即使基于具有所有感兴趣链接的文本文件,您也可以将Webdriver定向到网站上的其他页面:

假设文本文件(在下面显示为“ LINKS.txt” )具有 以下链接:
https://www.website.com/home/item1
https://www.website.com/home/item2
https://www.website.com/home/item3

with open('LINKS.txt','r') as directory:
   for items in directory:
    driver.get(items)
    iframe = driver.find_element_by_xpath("//iframe[@class='LegacyFeature__Iframe-tasygr-1 bFBhBT']")
    driver.switch_to.frame(iframe)
    time.sleep(10)
    elements = driver.find_elements_by_class_name('data-xl')
    for element in elements:
        print(element.text)

time.sleep(10)

上面的代码应允许您访问 ... item1 ... item2 ... item3 页面(如按“ .txt”文件),抓取元素并打印输出。

本文链接:https://www.f2er.com/2843885.html

大家都在问