我们在调用浏览器去做自动化操作和我们手工打开的一个浏览器并不相同,就拿 window.navigator.webdriver来说,在手动打开的浏览器中返回我们的是 False 或 None,我们用Playwright去打开一个浏览器时则返回的一个 True,对方完全可以根据这个条件来判断我们是否是真人从而阻止我们进行操作,那么我们就可以用其他方法去规避他们的检测
方案一:
通过一个 js 文件去规避检测(这个方法也许在未来会失效)看代码:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False, slow_mo=1000)
context = browser.new_context()
context.add_init_script(path='stealth.min.js')
page = context.new_page()
page.goto('https://www.taobao.com/')
ret = page.evaluate('window.navigator.webdriver')
print(ret)
page.wait_for_timeout(3000)
page.close()
context.close()
browser.close()
可以在上下文管理器中添加 stealth.min.js文件,这个js文件主要是用来把我们的驱动给伪装成正常的浏览器,当然这个方法以后也许会失效,接下来我们来讲一个永久性方法,需要stealth.min.js文件的可以私信我
方案二:
我们可以亲自打开浏览器,然后让Playwright进行接管我们的浏览器去进行下一步操作,接下来的操作可能会有些不同,每个操作系统有每个操作系统不同的操作,在下面我们将以MAC系统来进行操作演示
首先找到谷歌可执行程序的完整路径,Mac本的Chrome在该目录下:
/Applications/Google Chrome.app/Contents/MacOS/
然后我们,打开终端,cd进入到该目录中,执行Google Chrome可执行程序,此时会打开一个Google浏览器,证明这一切正常,我们进入下一步
创建一个空白文件夹,用于保存浏览器数据
打开cmd输入命令启动chrome浏览器
./Google Chrome --remote-debugging-port=8899 --incognito --start-maximized --user-data-dir=“空白文件夹路径”
Playwright接管浏览器
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp('http://localhost:8899/')
# 获取page对象
page = browser.contexts[0].pages[0]
#该操作会直接作用在接管的浏览器中
page.locator('//*[@id="kw"]').fill('haha')
res = page.evaluate('window.navigator.webdriver')
print(res)
print(page.url)
print(page.title())
接管之后,我们可以继续做一些其他的操作,具体跟需求而定
好了,今天就先到这,我们明天继续讲解案例:爬某红书
乾坤未定,你我皆牛马