weixin_54686435 2021-07-02 00:00 采纳率: 61.5%
浏览 432
已结题

selenium遍历循环网页报错

我在爬取淘宝的时候,使用selenium打开了一个网页,提取到里面所有的url,模拟点击操作里面的url,当点进去第一个链接以后我把信息提取完就关闭当前这个网页,在第二次循环遍历的时候就报错了。求大神指点这个是为什么?能不能帮我实现一下这个功能,点击完一个url提取信息以后就关闭,继续点击下一个url。直到退出循环

from selenium import webdriver
from time import sleep
import json
from random import randint

class Taobao():
    def __init__(self):
        self.options = webdriver.ChromeOptions()
        self.options.add_experimental_option('excludeSwitches', ['enable-automation'])
        self.driver = webdriver.Chrome(options=self.options)

    def get_cookies(self, url):
        #获取登录cookie
        self.driver.get(url)
        sleep(20)
        with open('tb_cookie.txt', 'w') as f:
            f.write(json.dumps(self.driver.get_cookies()))
        # self.driver.quit()

    def have_cookies(self, url):
        #提取需要登录的cookie
        self.driver.get(url)
        with open('tb_cookie.txt', 'r')as f:
            cookie_list = json.loads(f.read())
            for cookie in cookie_list:
                self.driver.add_cookie({
                    'domain': '.taobao.com',
                    'name': cookie['name'],
                    'value': cookie['value'],
                    'path': '/',
                    'expires': None
                })
        sleep(randint(7,15))
        # print(self.driver.page_source)

    def have_html(self,url):
        self.driver.get(url)
        m = self.driver.find_elements_by_xpath('//div[@id="J_u_root"]/div/div/ul/li/a')
        for i in m:
            sleep(randint(7, 15))
            i.click()
            #获取当前网页后信息后关闭网页
            windows = self.driver.window_handles
            self.driver.switch_to.window(windows[1])
            sleep(randint(7, 15))
            # self.driver.switch_to.window(windows[0])
            self.driver.close()

if __name__ == '__main__':
    url = 'https://login.taobao.com/member/login.jhtml?'
    urls = 'https://ai.taobao.com/search/index.htm?spm=a231o.13503973.search.1&key=手机'

    t = Taobao()
    # t.get_cookies(url)
    t.have_cookies(url)
    t.have_html(urls)


以下是报错信息:
selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
from unknown error: web view not found
(Session info: chrome=72.0.3626.121)
(Driver info: chromedriver=2.46.628402 (536cd7adbad73a3783fdc2cab92ab2ba7ec361e1),platform=Windows NT 10.0.19042 x86_64)

  • 写回答

3条回答 默认 最新

  • CSDN专家-黄老师 2021-07-02 09:20
    关注

    我这边直接运行have_html是没有报错的,have_html的url好似不用登录多可以访问的。

                windows = self.driver.window_handles
                self.driver.switch_to.window(windows[-1])
                # sleep(randint(7, 15))
                # self.driver.switch_to.window(windows[0])
                self.driver.close()
                windows = self.driver.window_handles
                self.driver.switch_to.window(windows[-1])
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月14日

悬赏问题

  • ¥50 gki vendor hook
  • ¥15 centos7中sudo命令无法使用
  • ¥15 灰狼算法和蚁群算法如何结合
  • ¥15 这是一个利用ESP32自带按键和LED控制的录像代码,编译过程出现问题,请解决并且指出错误,指导如何处理 ,协助完成代码并上传代码
  • ¥20 stm32f103,hal库 hal_usart_receive函数接收不到数据。
  • ¥20 求结果和代码,sas利用OPTEX程序和D-efficiency生成正交集
  • ¥50 adb连接不到手机是怎么回事?
  • ¥20 抓取数据时发生错误: get_mooncake_data() missing 1 required positional argument: 'driver'的问题,怎么改出正确的爬虫代码?
  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联