我正在开发一个项目,该项目涉及使用网络驱动程序搜索并获取学校的网站链接。我的脚本必须查找大约 10 万所学校,因此需要自动化。但是,我不断遇到验证码检测到我的脚本是机器人的问题,并且需要有关该怎么做的建议。以下是我正在使用的规格: Python 硒与 chromedriver VS代码 Macbook
我在查找每个网站后实现了 time.sleep ,并且它的睡眠时间是从 4、5 或 6 秒中随机选择的。
我还添加了一个函数,可以使用 JavaScript 命令随机选择滚动网页的像素数,以模拟人的实际交互。
我也尝试过无头和非无头,但非无头会立即被验证码标记,而无头可以在被标记之前完成大约 15 所学校。
from selenium.webdriver.common.proxy import Proxy, ProxyType def set_proxy(driver, proxy_ip): 代理=代理() proxy.proxy_type = ProxyType.MANUAL proxy.http_proxy = proxy_ip proxy.add_to_capability(webdriver.DesiredCapability.CHROME) driver.start_session(webdriver.DesiredCapability.CHROME)
from selenium.webdriver.common.by import By from
selenium.webdriver.common.keys import Keys from
selenium.webdriver.common.action_chains import ActionChains from
fake_useragent import UserAgent
def get_driver():
user_agent = UserAgent().random
options = webdriver.ChromeOptions()
options.add_argument(f'user-agent={user_agent}')
driver = webdriver.Chrome(chrome_options=options)
return driver
导入请求
def solve_captcha(captcha_image_path):
api_key = 'YOUR_2CAPTCHA_API_KEY'
captcha_image = open(captcha_image_path, 'rb')
response = requests.post(
"http://2captcha.com/in.php",
files={'file': captcha_image},
data={'key': api_key}
)
captcha_id = response.text.split('|')[1]
result = requests.get(
f"http://2captcha.com/res.php?key={api_key}&action=get&id={captcha_id}"
)
return result.text.split('|')[1]