我下面的代码是继续解决一个不同的Captcha!请纠正我的错误,因为我不知道是什么原因造成的!
from selenium import webdriver
from python3_anticaptcha import ImageToTextTask, CallbackClient
import time
import requests
browser = webdriver.Firefox()
url = 'https://urlmased.com/'
browser.get(url)
time.sleep(10)
username = browser.find_element_by_id("masked")
username.send_keys("testuser")
password = browser.find_element_by_id("masked")
password.send_keys("testpass")
image_link = browser.find_element_by_xpath(
'//*[@id="masked"]').get_attribute('src')
pic = requests.get(image_link)
if pic.status_code == 200:
with open("image.png", 'wb') as f:
f.write(pic.content)
ANTICAPTCHA_KEY = 'masked'
captcha_file = "image.png"
result = ImageToTextTask.ImageToTextTask(
anticaptcha_key=ANTICAPTCHA_KEY).captcha_handler(captcha_file=captcha_file)
captcha = browser.find_element_by_id("masked")
captcha.send_keys(result['solution']['text'])
login = browser.find_element_by_id("yw2")被告知该API是活动的,所以您可以使用它,直到找到解决方案为止。然后我会改变它。
求解精度为100%。
发布于 2019-11-22 04:35:23
这里的问题是,页面源中的captcha URL不是实际的图像URL。它是一个动态生成captcha图像的脚本,当您使用captcha解决器API时,您正在解决一个与加载的浏览器不同的图像。要解决这个问题,我们必须保存浏览器加载的相同图像。我跟踪了图像请求,发现它使用的是浏览器加载页面时生成的唯一cookie。
使用硒:
from selenium import webdriver
from python3_anticaptcha import ImageToTextTask, CallbackClient
from time import sleep
import requests
def GetImageCookies():
print('Extracting Browser Cookies')
image_cookies = ''
for cookie in browser.get_cookies():
if cookie['name'] == 'ssc':
image_cookies += 'ssc={};'.format(cookie['value'])
elif cookie['name'] == 'ghsdfkjlksssalk35bbr':
image_cookies += 'ghsdfkjlksssalk35bbr={};'.format(cookie['value'])
# print(image_cookies)
return image_cookies
def SaveImage(captcha_file = "master.jpg"):
print('Saving the captcha image')
header = {
'Accept': 'image/webp,image/apng,image/*,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en,en-US;q=0.9,ar;q=0.8',
'Cookie': GetImageCookies(),
'Host': 'masked',
'Referer': 'masked',
'Sec-Fetch-Mode': 'no-cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0'}
pic = requests.get('https://masked/site/captcha/v/',verify=False,headers = header)
if pic.status_code == 200:
with open(captcha_file, 'wb') as f:
f.write(pic.content)
def SolveCapcha(captcha_file = "master.jpg"):
print('Solving the captcha image')
ANTICAPTCHA_KEY = 'masked'
result = ImageToTextTask.ImageToTextTask(
anticaptcha_key=ANTICAPTCHA_KEY).captcha_handler(captcha_file=captcha_file)
captcha_text = result['solution']['text']
print('Captcha text is :',captcha_text)
return captcha_text
browser = webdriver.Firefox()
url = 'https://masked/'
browser.get(url)
def Login():
SaveImage()
sleep(5)
username = browser.find_element_by_id("masked_username")
username.clear()
username.send_keys("testuser")
password = browser.find_element_by_id("masked")
password.clear()
password.send_keys("testpass")
captcha = browser.find_element_by_id("masked")
captcha.clear()
captcha_text = SolveCapcha()
captcha.send_keys(captcha_text)
login = browser.find_element_by_id("masked").click()
sleep(5)
err_message = browser.find_elements_by_id('masked')
if err_message :
if err_message[0].text == 'The verification code is incorrect.':
print(err_message[0].text)
return False
return True
"""The logic here is that the image gets downloaded using the cookies but sometimes
the letters are hard to be solved so each time we download the same image with the
same cookies the content of the image will be the same but how it's written is different
So we keep trying till we get it right """
while Login() == False:
Login()使用请求和美丽的汤:以下是不确定它是否有效的想法,您必须测试自己:
from bs4 import BeautifulSoup
def SaveImage(captcha_file = "master.jpg"):
print('Saving the captcha image')
header = {
'Accept': 'image/webp,image/apng,image/*,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en,en-US;q=0.9,ar;q=0.8',
'Host': 'masked',
'Referer': 'https://masked/',
'Sec-Fetch-Mode': 'no-cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0'}
pic = session.get('https://masked/site/captcha/v/',verify=False,headers = header)
if pic.status_code == 200:
with open(captcha_file, 'wb') as f:
f.write(pic.content)
with requests.Session() as session:
source = session.get(url = 'https://masked/',verify=False) # To get the itial cookies
soup = BeautifulSoup(source.text, 'html.parser')
token = soup.find('input', {'name': 'masked'}).get('value')
SaveImage()
captcha_text = SolveCapcha()
post_data={"masked": token,
'masked[username]': 'testuser',
'masked[password]': 'testpass',
'masked[captcha]': captcha_text,
'masked':''}
session.post('https://masked/', data=post_data,verify=False)发布于 2019-11-21 08:36:41
正如@pguradiario提到的那样,request.Session什么也不做。
from selenium import webdriver
from python3_anticaptcha import ImageToTextTask
import time
browser = webdriver.Chrome()
url = 'https://masked/'
browser.get(url)
time.sleep(10)
username = browser.find_element_by_id("masked")
username.send_keys("testuser")
password = browser.find_element_by_id("masked")
password.send_keys("testpass")
image_link = url + browser.find_element_by_xpath('//*[@id="masked"]').get_attribute('src')
print(image_link)
ANTICAPTCHA_KEY = "masked"
user_answer = ImageToTextTask.ImageToTextTask(anticaptcha_key=ANTICAPTCHA_KEY).\
captcha_handler(captcha_link=image_link)
captcha = browser.find_element_by_id("masked")
captcha.send_keys(user_answer['solution']['text'])
login = browser.find_element_by_id("masked")发布于 2021-01-27 12:11:59
Captcha截图而不是从链接中获取图像应该可以解决这个问题。
from selenium import webdriver
from python3_anticaptcha import ImageToTextTask
import time
browser = webdriver.Firefox()
url = 'https://urlmased.com/'
browser.get(url)
time.sleep(10)
username = browser.find_element_by_id("masked")
username.send_keys("testuser")
password = browser.find_element_by_id("masked")
password.send_keys("testpass")
captcha = browser.find_element_by_xpath(
'//*[@id="masked"]')
captcha_image = captcha.screenshot_as_png
with open('image.png', 'wb') as f:
f.write(captcha_image)
ANTICAPTCHA_KEY = 'masked'
captcha_file = "image.png"
result = ImageToTextTask.ImageToTextTask(
anticaptcha_key=ANTICAPTCHA_KEY).captcha_handler(captcha_file=captcha_file)
captcha = browser.find_element_by_id("masked")
captcha.send_keys(result['solution']['text'])
login = browser.find_element_by_id("yw2")https://stackoverflow.com/questions/58949031
复制相似问题