解决selenium+chromedriver +IP代理插件,设置无界面报错的问题
原标题:解决selenium+chromedriver +IP代理插件,设置无界面报错的问题
原文来自:CSDN 原文链接:https://blog.csdn.net/qq_36853469/article/details/103441480
针对有些动态网站,需要用到自动化测试工具。为了避免封IP保证抓取到数据,使用了IP代理;为了提高效率,想要设置成无界面模式,但是不管是windows下还是Linux下,一旦两者结合时,直接报错。
报错代码如下:
selenium.common.exceptions.WebDriverException: Message: unknown error: failed to wait for extension background page to load: chrome-extension://kmfmlecicfolmocapbbhilogaebehllm/_generated_background_page.html from unknown error: page could not be found: chrome-extension://kmfmlecicfolmocapbbhilogaebehllm/_generated_background_page.html
1.selenium+chromedriver 使用代理插件+无界面时报错:
错误代码如上就是上面给出的
差点翻遍谷歌和百度都没有找到解决办法.快绝望的时候看到篇博客,完美解决,博客原文后面再找时没找到了....
2.安装Xvfb虚拟界面工具和xdpyinfo
yum install Xvfb -y yum install xdpyinfo
3. 安装Python虚拟桌面 pyvirtualdisplay
pip3 install pyvirtualdisplay
4. 在chromedriver启动前启动一个显示器
from selenium import webdriver from pyvirtualdisplay import Display display = Display(visible=0, size=(800, 800)) display.start()
5. 浏览器属性设置
chrome_options = Options()
proxy_auth_plugin_path = self.set_id_proxy()
chrome_options.add_extension(proxy_auth_plugin_path)
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('blink-settings=imagesEnabled=false')
prefs = {'profile.managed_default_content_settings.images': 2}
chrome_options.add_experimental_option('prefs', prefs)
#chrome_options.add_argument('--headless') #不设置,其实是有界面
self.driver = webdriver.Chrome(options=chrome_options)
self.wait = WebDriverWait(self.driver, 20) # 设置等待时间20秒6. 测试
self.driver.get(url) print(self.driver.page_source)
成功获取到页面数据

1.新建scrapy项目,新建spider,items.py中添加好相关字段
2.setting.py中将下载中间件DOWNLOADER_MIDDLEWARES 和管道ITEM_PIPELINES打开
DOWNLOADER_MIDDLEWARES = {'wbScrapy.middlewares.wbscrapyDownloaderMiddleware': 543,}ITEM_PIPELINES = {'wbScrapy.pipelines.wbscrapyPipeline': 300,}3.修改middlewares.py,在process_request(self, request, spider)函数中添加代理信息
#具体代理信息自行配置,这里是阿布云 def process_request(self, request, spider): request.meta["proxy"] = proxyServer request.headers["Proxy-Authorization"] = proxyAuth
4. spider爬虫文件中:
# -*- coding: UTF-8 -*-
import scrapy
from wbScrapy.items import WbscrapyItem
from scrapy import Request
import time
import re
from selenium import webdriver
from time import sleep
import random
import json
from lxml import etree
import requests
class WbSpider(scrapy.Spider):
name = 'spiderNames'
allowed_domains = ['']
start_urls = ['']
bash_url = ''
def __init__(self):
'''
浏览器配置初始化
'''
self.chromedriverPath = r"./chromedriver.exe" #windows下驱动位置,linux下不需要
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--headless')
chrome_options.add_argument('blink-settings=imagesEnabled=false')
chrome_options.add_argument('--disable-gpu')
prefs = {'profile.managed_default_content_settings.images': 2}
chrome_options.add_experimental_option('prefs', prefs)
self.driver = webdriver.Chrome(executable_path=self.chromedriverPath, options=chrome_options)
self.driver.set_page_load_timeout(60)
self.flag = True
# 当爬虫退出的时候关闭Chrome
def spider_closed(self, spider):
self.driver.quit()
def start_requests(self):#调起爬虫中间件,让脚本走代理
full_url = "https://www.baidu.com/" #随便写个接口进来,转走
yield scrapy.Request(full_url,callback=self.parse, dont_filter=True)
def parse(self,reponse):
item = WbscrapyItem()
#......根据需求直接编写抓取数据代码最终效果:通过终端打印+本地抓取到的数据,说明无界面+代理插件生效

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。
合作及投稿邮箱:E-mail:editor@tusaishared.com
热门资源
TensorFlow从1到2...
原文第四篇中,我们介绍了官方的入门案例MNIST,功...
Python 爬虫(二)...
所谓爬虫就是模拟客户端发送网络请求,获取网络响...
TensorFlow从1到2...
“回归”这个词,既是Regression算法的名称,也代表...
TensorFlow2.0(9...
TensorBoard是TensorFlow中的又一神器级工具,想用...
剑指Offer(三十一...
这个系列是我在牛客网上刷《剑指Offer》的刷题笔记...
智能在线
400-630-6780
聆听.建议反馈
E-mail: support@tusaishared.com