import random from pyppeteer import launch # 控制模拟浏览器用 from pyppeteer.dialog import Dialog from retrying import retry # 设置重试次数用的 js1 = '''() =>{Object.defineProperties(navigator,{webdriver:{get: () => undefined} })}''' js2 = '''() => {alert ( window.navigator.webdriver )}''' async def close_dialog(page): # 点击弹窗 # class*= 模糊匹配 await page.evaluate( '''var temp=document.querySelector('button[class*="infotip__close"]');if(temp){temp.click()}''') await page.evaluate( '''var temp=document.querySelector('span[class="step-close"]');if(temp){temp.click()}''') await page.evaluate( '''var temp=document.querySelector("a[class*='dialog-close']");if(temp){temp.click()}''') await page.evaluate('''document.querySelector("div[role='dialog']").remove()''') await page.evaluate('''var temp=document.querySelector('button[class*="close"]');if(temp){rs.click()}''') await page.evaluate('''var rs=document.querySelector('a[title="Close"]');if(rs){rs.click()}''') await page.evaluate( '''var heddens=document.querySelector("div[style*='overflow:hidden']");if(heddens){heddens.remove()}''') a_tags = await page.xpath('//button[contains(@class,"close") or contains(@id,"close") or contains(@aria-label,"close")]') a_tags1 = await page.xpath('//a[contains(@class,"close") or contains(@id,"close") or contains(@aria-label,"close") or contains(@title,"Close")]') for a in a_tags + a_tags1: a.click() except: async def main(url): # 定义main协程函数, #插件路径 chrome_extension = r'C:\Users\Administrator.USER-20190313RI\AppData\Local\Chromium\User Data\Default\Extensions\dbclpoekepcmadpkeaelmhiheolhjflj\0.2.7_0' args = ['--no-sandbox', '--disable-gpu', '--log-level=3', #日志等级 '--disable-infobars', # 关闭提示 '--window-size={},{}'.format(1080,950), # "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36", '--load-extension={}'.format(chrome_extension), #加载扩展插件 '--disable-extensions-except={}'.format(chrome_extension), if proxy: ip=re.findall('(\d+\.\d+\.\d+\.\d+:\d+)',proxy) if len(ip)>0: args.append("--proxy-server=http://{}".format(proxy)) exepath = r'D:\Program_Files\chrome-win32\chrome.exe' #chromium浏览器路径 # dumpio:True 浏览器就不会卡住了 #浏览器启动参数 params={'executablePath': exepath, "userDataDir": r"F:\temporary", 'headless': False, 'args':args, 'dumpio':True} browser = await launch(params) # 启动pyppeteer 属于内存中实现交互的模拟器 page = await browser.newPage() # 启动个新的浏览器页面 await page.setUserAgent( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36') #设置页面超时 page.setDefaultNavigationTimeout(1000*60) #60s #启用js await page.setJavaScriptEnabled(True) # 启用拦截器 # await page.setRequestInterception(True) await page.evaluate(js1) await page.evaluate(js2) await page.setViewport({'width':1300,'height':868}) #设置界面 page.on('dialog', lambda dialog: asyncio.ensure_future(handle_dialog(page,dialog))) await page.goto(url) # 访问登录页面 await asyncio.sleep(5) # 关闭弹窗 await close_dialog(page) await browser.close() async def handle_dialog(page,dialog: Dialog): print(dialog.message)#打印出弹框的信息 print(dialog.type)#打印出弹框的类型,是alert、confirm、prompt哪种 # print(dialog.defaultValue())#打印出默认的值只有prompt弹框才有 await page.waitFor(2000)#特意加两秒等可以看到弹框出现后取消 await dialog.dismiss() # await dialog.accept(‘000’) #可以给弹窗设置默认值 import asyncioimport timeimport randomfrom pyppeteer import launch # 控制模拟浏览器用from pyppeteer.dialog import Dialogfrom retrying import retry # 设置重试次数用的js1 = '''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () =&... import random from pyppeteer import launch # 控制模拟浏览器用 from pyppeteer . dialog import Dialog from retrying import retry # 设置重试次数用的 js1 = '''() =>{Object.defineProperties(navigator,{webdriver:{get: () => undefined} })}'. Selenium 在被使用的时候有个麻烦事,就是环境的相关配置,得安装好相关浏览器,比如 Chrome 、Firefox 等等,然后还要到官方网站去下载对应的驱动,最重要的还需要安装对应的 Python Selenium 库,确实是不是很方便,另外如果要做大规模部署的话,环境配置的一些问题也是个头疼的事情。那么本节就介绍另一个类似的替代品,叫做 Pyppeteer Pyppeteer 简介 注意,本节讲解的模块叫做 Pyppeteer ,不是 Puppeteer。Puppeteer 是 Google 基于 Node.js 开发的一个工具,有了它我们可以通过 JavaScript 来控制 browser = await launch() page = await browser.newPage() res = await page.goto(url, options={'timeout': 30000}) data = await page.content() title = await page async def main(): browser = await pyppeteer .launch(headless=False, args=['--disable-infobars']) page = await browser.newPage() await page.setViewport({'width': 1366, 'height': 768}) await page.evaluateOnNe async def main(): # 启动一个浏览器 browser = await launch(headless=False,args=['--disable-infobars']) # 创建一个页面 page = await browser.newPage() # 跳转到百度
爬虫小白,昨天领导给了个任务要抓一些数据,看了下页面以为是简单页面解析一下就可以,觉着没什么问题,之后发现被打脸了。   页面:http://query.bjeea.cn/queryService/rest/plan/134   要求:按院校查询和按专业查询的数据原样抓下来 1、出现的问题   最初采用requests+BeautifulSoup解析的方式,抓 按院校查询 的数据没有问题(代码在最后),但是在抓 按专业查询 的数据时出现抓到的页面和在浏览器看到不一致的情况,每次抓取都是按院校查询的数据,
最近在使用 pyppeteer 抓淘宝,同事使用 JavaScript 写调用puppeteer能完美运行。但我改成python就一直报这样一个错误: pyppeteer .errors.NetworkError: Protocol Error (Page.navigate): Session closed. Most likely the page has been closed 而代码中造成这样一个错误...
已有大佬写过 Pyppeteer 的详细说明,这里主要说一下在爬虫过程中遇到的关于click问题。 click方法很简单,就直接调用 await page.click('.Selector', options={'button': 'left', #left, right, of middle, defaults to left 'clickCount': 1, # 1 or 2 python3 import cv2 报 ModuleNotFoundError: No module named 'numpy.core._multiarray_umath' qq_47146581: 太牛了太牛了,解决了我一个小时都没解决的问题!! 表情包 scrapy-redis 完全重写start_requests函数 water___Wang: Python 向 xlsx多个表追加内容 不正经的kimol君: 厉害,赞一个,欢迎回赞哦~