爬虫补环境jsdom、proxy、Selenium案例:某条

这篇具有很好参考价值的文章主要介绍了爬虫补环境jsdom、proxy、Selenium案例:某条。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

声明:
该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关

一、简介

爬虫逆向补环境的目的是为了模拟正常用户的行为,使爬虫看起来更像是一个真实的用户在浏览网站。这样可以减少被网站封禁或限制访问的风险,提高爬取成功率。同时,合理的环境补充也有助于保护爬虫的隐私和安全,避免被恶意攻击或追踪。
由于浏览器和node的差别,很多网站会根据这些差别做一些校验,会导致浏览器的js代码在node没有办法执行,js代码会根据浏览器的这些属性来判断你是不是在真正的浏览器执行的代码,要不是正确的浏览器环境则不会返回正确的数据信息,拿到代码在node里面执行、经常看到这一类型的错误,提示xxx未定义,其实这一块就是浏览器对象的一些特征

二、找出网站加密位置,并扣出代码
  1. js运行 atob(‘aHR0cHM6Ly93d3cudG91dGlhby5jb20v’) 拿到网址,F12打开调试工具,点击推荐发送请求,找到 pc/list/feed 请求,鼠标右击请求找到Copy>Copy as cUrl(cmd)
  2. 打开网站:https://spidertools.cn/#/curl2Request,把拷贝好的curl转成python代码,新建 jrtt.py,把代码复制到该文件
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  3. 关键字_signature搜索,会发现有_signature赋值的地方
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  4. 右击该文件,选择在source中打开
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  5. 在该文件内 Ctrl+F 搜索_signature,会发现有两个赋值的地方全部打上断点
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  6. 点击推荐重新发送请求,会发现断点进入 var n = I(F.getUri(e), e),鼠标悬浮到 I 上点击蓝色部分快速找到该方法,会发现一个 I(e, t) 方法,在该方法内部打断点
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  7. 点击跳过断点,会进入该断点,分析代码会发现该代码return出去的是 a.call(n, o),而a=n.sign,n = window.byted_acrawler,o则是请求地址加上参数的一串字符,鼠标悬浮到 window.byted_acrawler 找到 sign方法,点击蓝色部分快速找到该方法,分析代码会发现该函数是jsvmp实现的,jsvmp是js虚拟机保护方案
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  8. 新建jrtt.js,把代码全部拷贝到该文件,再把 o 在控制台输出,拷贝到jrtt.js文件
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
三、打断点补环境
  1. 运行jrtt.js,会发现报 window 错误,window是浏览器中的,node环境不存在,在代码顶部补上window:window = global
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  2. 运行jrtt.js,会报 sign 错误,这是因为刚才的sign是声明在 window.byted_acrawler 中,而现在的window中没有byted_acrawler,补上byted_acrawler:
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  3. 运行jrtt.js,会报referrer的错误,在source中的加密文件,搜索 S[R] = S[R][A],会找到该代码,在该代码处打个日志断点,在日志断点处输出 S[R]、A、S[R]A
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  4. 取消之前所有的断点,除了刚才的日志断点,刷新网页,会发现控制台中打印很多日志,这些就是刚才的日志断点生成的,控制台搜索referrer,会发现是document下的referrer,且值是一个空字符串,在代码顶部补上referrer
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  5. 运行jrtt.js文件 sign 错误,找代码会发现 “undefined” != typeof exports ? exports : void 0,这是环境检测 exports 是node环境的,把代码修改为 “undefined” == typeof exports
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  6. 运行jrtt.js文件会报 href 错误,同 referrer 一样,在控制台搜索 href,会发现 href 是 location 下的,在代码顶部补上该代码
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  7. 运行jrtt.js文件会报 length 错误,因太多对象有length,所以length不能像href、referrer 一样直接再浏览器控制台搜索,找到拷贝下的加密代码,搜索 S[R] = S[R][A],找到对应位置添加 console.log(A)
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  8. 运行jrtt.js文件,会发现报错length的对象是protocol,同href、referrer,一样在控制台搜索protocol,会发现 protocol 是 location 下的,在代码顶部补上该代码
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  9. 运行jrtt.js文件,会报userAgent的错误,在控制台搜索userAgent,会发现userAgent是navigator中的,在顶部补上该代码
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  10. 再次运行jrtt.js文件,会发现已经没有报错,参数加密成功,直到现在补了 windows、href、protocol、userAgent这些
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  11. 验证加密结果:修改jjtt.py,并运行,数据获取成功
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
四、吐环境脚本,检测环境

使用Proxy对目标环境进行拦截,检测缺少的环境,Proxy对象由两个部分组成:target、handler
handler:是一个对象,声明了代理target的指定行为,支持的拦截操作,一共13种:

  1. get(target,propKey,receiver):拦截对象属性的读取。
  • target: 目标对象
  • propKey: 被获取的属性名。
  • receiver: Proxy 或者继承 Proxy 的对象
  1. set(target,propKey,value,receiver):拦截对象属性的设置,返回一个布尔值(修改成功)。
  • target: 目标对象
  • propKey: 被获取的属性名。
  • value: 新属性值。
  • receiver: Proxy 或者继承 Proxy 的对象
  1. 新建jsProxy.js,放入以下代码,代码可通用,需要扩展的可在该代码基础上扩展
// 代理器封装
function getEnv(proxy_array) {
    for(var i=0; i<proxy_array.length; i++){
        handler = `{\n
            get: function(target, property, receiver) {\n
                   console.log('方法:get','    对象:${proxy_array[i]}','    属性:',property,'    属性类型:',typeof property,'    属性值类型:',typeof target[property]);
                   return target[property];
            },
            set: function(target, property, value, receiver){\n
                    console.log('方法:set','    对象:${proxy_array[i]}','    属性:',property,'    属性类型:',typeof property,'    属性值类型:',typeof target[property]);
                    return Reflect.set(...arguments);
            }
        }`;
        eval(`
            try{\n
                ${proxy_array[i]};\n
                ${proxy_array[i]} = new Proxy(${proxy_array[i]},${handler});
            }catch(e){\n
                ${proxy_array[i]}={};\n
                ${proxy_array[i]} = new Proxy(${proxy_array[i]},${handler});
            }   
        `)
    }
}

// proxy_array = ['window', 'document', 'location', 'navigator', 'history','screen','target' ]
// getEnv(proxy_array)

module.exports = getEnv
  1. 修改jrtt.js,运行jrtt.js,会发现有很多undefined的,这些就是需要补的值,由刚才的断点不环境得知sessionStorage、localStorage、cookie等是不需要补的,所以如果不知道需要补哪些环境,就先补报错的,报错的补完,先验证下,如果验证不通过在补其他的
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  2. 由刚才的报错得知location下的herf获取时值时undefined,所以先补href,直接在控制台输出location.href值补上
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
  3. 重复步骤5,直到没有报错再去验证结果,运行jjtt.py后会发现,虽然没补referrer,但是数据依然获取成功,那是因为referrer是空值,已经在代理中把它之前的值返回了
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
五、Selenium补环境

selenium就是一个真实的浏览器环境,可以把扣下来的代码直接用Selenium来进行访问

  1. 新建jrtt.html,把之前扣下的代码拷贝到script下,因为是在浏览器下运行的,所以把之前检验环境的 “undefined” != typeof exports ? exports 还原
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium

  2. 浏览器打开该html,验证window.byted_acrawler.sign会发现加密成功
    爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium

  3. 新建seleniumJrtt.py,如果运行出错,先检查下自己浏览器和谷歌驱动版本

import os
from selenium import webdriver

PRO_DIR = os.path.dirname(os.path.abspath(__file__))
def driver_sig(html_file):
    option = webdriver.ChromeOptions()
    option.add_argument('--disable-blink-features=AutomationControlled')
    option.add_argument('headless')
    driver = webdriver.Chrome(options=option)
    driver.get(PRO_DIR +'\\'+ html_file)
    return driver

html_file = 'jrtt.html'
driv = driver_sig(html_file)

js_code = '''
return window.byted_acrawler.sign(arguments[0]);
'''

par = {
    "url": "https://www.toutiao.com/api/pc/list/feed?channel_id=0&min_behot_time=1700905532&offset=0&refresh_count=7&category=pc_profile_recommend&aid=24&app_name=toutiao_web"
}

result = driv.execute_script(js_code,par)

print(result)
六、jsdome补环境

爬虫补环境jsdom、proxy、Selenium案例:某条,python,爬虫,selenium文章来源地址https://www.toymoban.com/news/detail-799045.html

到了这里,关于爬虫补环境jsdom、proxy、Selenium案例:某条的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python爬虫selenium页面滑动案例,作为一个Python程序员你还不会JetPack

    def up_page(self): time.sleep(1) self.driver.find_element(By.XPATH,‘//*[text()=“下一页”]’).click() def save_page(self, n=1): time.sleep(2) with open(f’第{n}页.html’, ‘w’, encoding=‘utf-8’) as f: f.write(self.driver.page_source) def run(self): try: self.save_page() # 第一页 for n in range(2, 6): # 第二三四五页 self.scroll() s

    2024年04月22日
    浏览(50)
  • Python爬虫Selenium手动接管Edge爬取裁判文书网“环境污染”数据(Mac环境)

    目标数据:爬取从2007年到2022年,各地级市中级法院历年关于“环境污染”的裁判文书数量。 由于裁判文书网需要登录,Selenium手动接管爬取可避免频繁登录造成的封号风险。 Selenium如何手动接管Edge浏览器: 1、打开终端,将命令 /Applications/Microsoft Edge.app/Contents/MacOS/Microsof

    2023年04月09日
    浏览(38)
  • 爬虫练习:Selenium使用案例

    一、获取某电商平台商品信息 二、获取某网站小说信息 版权声明和免责声明 本博客提供的所有爬虫代码和相关内容(以下简称“内容”)仅供参考和学习之用。任何使用或依赖这些内容的风险均由使用者自行承担。我(博客所有者)不对因使用这些内容而产生的任何直接或

    2024年04月14日
    浏览(33)
  • Selenium库编写爬虫详细案例

    一、引言 Selenium作为一个强大的自动化测试工具,其在网络爬虫领域也展现出了许多技术优势。首先,Selenium可以模拟浏览器行为,包括点击、填写表单、下拉等操作,使得它能够处理一些其他爬虫工具无法应对的情况,比如需要登录或者页面使用了大量JavaScript渲染的情况。

    2024年02月04日
    浏览(37)
  • Python爬虫基础之Selenium详解_python selenium

    from selenium import webdriver from selenium.webdriver.common.by import By browser= webdriver.Chrome() url = ‘https://www.baidu.com’ browser.get(url) button = browser.find_element(By.ID, ‘su’) print(button) button = browser.find_element(By.NAME, ‘wd’) print(button) button = browser.find_element(By.XPATH, ‘//input[@id=“su”]’) print(button)

    2024年04月15日
    浏览(53)
  • python spider 爬虫 之 Selenium 系列 (-) Selenium

    京东的 seckill 秒杀 专区 用 urllib 是获取不到的 回顾一下urllib 爬虫 Selenium Selenium定义 Selenium是一个用于Web应用程序测试的工具 Selenium测试 直接 运行在浏览器中,就像真实的用户在操作一样 支持通过各种driver ( FireFoxDriver, InternetExplorerDriver、OperaDriver、ChromeDriver)驱动真实浏

    2024年02月16日
    浏览(38)
  • Python爬虫之用Selenium做爬虫

    我们在用python做爬虫的时候,除了直接用requests的架构,还有Scrapy、Selenium等方式可以使用,那么今天我们就来聊一聊使用Selenium如何实现爬虫。 Selenium是什么? Selenium是一个浏览器自动化测试框架,是一款用于Web应用程序测试的工具。框架底层使用JavaScript模拟真实用户对浏览

    2024年02月13日
    浏览(39)
  • python 配置 selenium爬虫

    这两天学习Python爬虫,记录一下这个折磨我一两个小时的配置。 值得注意的是,下载的chromedriver.exe文件必须放在和运行的.py文件同一目录下,否则就会报错: selenium.common.exceptions.WebDriverException: Message: ‘chromedriver’ executable needs to be in PATH. Please see https://chromedriver.chromium.or

    2024年02月03日
    浏览(40)
  • python爬虫-Selenium

    Selenium是一个用于Web应用程序测试的工具,Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。模拟浏览器功能,自动执行网页中的js代码,实现动态加载。 打开谷歌浏览器--右上角三个点--帮助--关于 下载地址:http://chromedriver.storage.googleapis.com/index.html 找到对应浏

    2024年02月09日
    浏览(39)
  • python爬虫——selenium

    目录 一、背景​编辑 1.1、selenium的发展 1.2、在爬虫中的应用 1.3selenium执行原理图 1.4、WebDriver,与WebElement 二、准备​编辑 2.1、下载驱动 2.2、安装Selenium库 2.3、简单使用 三、实用操作​编辑 3.1、查找节点 3.1.1、查找元素在网页中的位置(网址为www.baidu.com,代码中的注释很详

    2024年02月09日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包