我已经有一个月的编码和Selenium的几天了。
这个网站非常顽固,我设法让它工作一次,而且没有更多,尽管代码没有改变。它在第一页后继续检测到我。
我尝试了几种绕过的方法: [开始代码]
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
这些是选项 -
option=webdriver.ChromeOptions()
option.add_argument('--incognito')
option.add_argument('--disable-extensions')
option.add_argument('--profile-directory=Default')
option.add_argument('--disable-plugins-discovery')
browser=webdriver.Chrome(chrome_options=option)
我发现可能有效的方法:
for page in range(1,int(last_page),1):
print(base_url+str(page)+base_search)
browser.get(base_url+str(page)+base_search)
grabber()
browser.quit()
(“grabber()”函数是抓取我需要的数据的工作函数
虽然 - 显然一旦你退出浏览器,并试图在同一个会话中重新打开另一个浏览器 - 会话崩溃([WinError 10061])。因为我在浏览器打开时获得了一个新的UA,所以它可能非常棒,而且我仍然可以抓取一个页面,因为我还没被发现。
因此,每个UserAgent都会给我一页刮,然后检测并烧掉它。
在这里探索一下让我改变了“call_function.js”:
function getPageCache(opt_doc, opt_w3c) {
var doc = opt_doc || document;
var w3c = opt_w3c || false;
//var key = '$cdc_asdjflasutopfhvcZLmcfl_';
var key = '$newplacetostorecache_';
if (w3c) {
if (!(key in doc))
doc[key] = new CacheWithUUID();
return doc[key];
} else {
if (!(key in doc))
doc[key] = new Cache();
return doc[key];
}
}
没用。
所以最后我尝试了这个万不得已的世界末日法:
import time
import string
import random
KEY_LEN = 20
def base_str():
return (string.ascii_letters+string.digits)
def key_gen():
keylist = [random.choice(base_str()) for i in range(KEY_LEN)]
return ("".join(keylist))
for page in range(1,int(last_page),1):
print(base_url+str(page)+base_search)
browser.get(base_url+str(page)+base_search)
grabber()
option.add_argument('--user-agent=' + key_gen())
print('user agent updated successfully')
它有效!!今天早上我能够从大约20页开始向前移动大约12页(在加载页面和会话结束之前花了太长时间)
但是几个小时之后它又不起作用了,我抓住了第一页后再次被发现,只是碰到了第二页的CAPTCHA
我还有什么方法可以尝试最终抓住这个网站的数据吗?