Как получить изображение, а затем отправить форму без обновления в Python, используя запросы - PullRequest
0 голосов
/ 24 октября 2019

Я запускаю некоторый код, и иногда веб-часть этого кода попадает в Captcha. Я хотел бы разрешить их вручную.

Для этого я:

  1. запросы. Получите HTML-код страницы
  2. , чтобы найти URL-адрес изображения.
  3. загрузить изображение
  4. ввести комбинацию символов в терминал

Затем я хочу опубликовать эту комбинацию на той же странице и отправить ее, не обновляястраницы (потому что это также приведет к обновлению капчи).

Однако я понятия не имею, как это сделать в Python, и я не могу найти какой-либо достойный источник в Интернете.

Я вставил весь код ниже, потому что я не уверен, как создать меньший пример для этого. Также не знаю, имеет ли это отношение.

import requests
from PIL import Image
from bs4 import BeautifulSoup as soup
import io
from fake_useragent import UserAgent

def download_image(url):
    r = requests.get(url)
    with Image.open(io.BytesIO(r.content)) as im:
        im.save("test.jpg")

def get_page(url):
    s = requests.Session()
    pageHTML = s.get(url).text
    return pageHTML

def make_soup(pageHTML):
    pageSoup = soup(pageHTML, features='lxml')
    return pageSoup

headers = {
    "User-Agent": UserAgent().random,
    'referrer': 'https://google.de',
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Encoding": "gzip, deflate, sdch, br",
    "Accept-Language": "en-US,en;q=0.8",
    }

url = "https://www.amazon.de/"

with requests.session() as s:
    pageHTML = s.get(url).text

    amSearchSoup = make_soup(pageHTML)
    #print(amSearchSoup)
    captchaURL = amSearchSoup.find("div",{"class":"a-row a-text-center"}).img["src"]
    download_image(captchaURL)

    print("Image downloaded")
    code = input("What's the Captcha?")

    data = {
            "captchacharacters": code,
            "submit": ""
            }

    url = "https://www.amazon.de/errors/validateCaptcha"
    a = s.post(url, data=data, headers=headers) # Login.

    with open('somefile.html', 'w') as the_file:
        the_file.write(a.text)
...