Разбор html-страницы и работа с checkbox

straannick

Новичок
Пользователь
Янв 12, 2021
2
0
1
Здравствуйте, пытаюсь написать самую первую программу на Python.
Использую Python 3.9 и PyCharm 2020.3.2 (Community Edition) в Windows 8.1 .
beautifulsoup4 4.9.3
certifi 2020.12.5
chardet 4.0.0
idna 2.10
lxml 4.6.2
pip 20.3.3
requests 2.25.1
selenium 3.141.0
setuptools 49.2.1
soupsieve 2.1
urllib3 1.26.2
Возникло два вопроса:
1. Хочу провести разбор своего фото-портфолио, состоящего из N страниц по 100 фото на каждой.
Python:
URL_ADDR = '''https://www.shutterstock.com/ru/g/Ivanov+Oleg'''

# Открываем страницу с заданным адресом URL_ADDR
page = urlopen(URL_ADDR)

# Считываем и перекодируем данные с открытой страницы
data = page.read().decode()

# Печатаем текст страницы в вывод
print(data)

Затем data планируется разобрать, но проблема в том, что нормальное декодирование (decode ()) любой из страниц (?page=1 ?page=2 и т.д.) заканчивается на 21-м фото: если у фото 1-20 <img class="z_h_9d80b z_h_2f2f0", то у 21-100 <img class="z_h_9d80b" и картинки не отображаются (см. портфолио.jpg), хотя в исходной странице у всех фото портфолио class="z_h_9d80b z_h_2f2f0"
Дополнительно могу сказать, что сравнение декодированной страницы и сохранённой ("Save as") показывает существенные различия и помимо различий в классах изображений (см. сравнение.jpg, diff.zip )

Интересно, что если декодировать страницу с помощью BeautifulSoup, получается та же картина - представление 21-го изображения искажается.

Python:
import requests
from bs4 import BeautifulSoup
. . .
url_get = requests.get(url)
soup = BeautifulSoup(url_get.content, 'lxml')
print (soup)

Вопрос: чем может быть вызвано такое поведение decode() и BeautifulSoup и как правильно перекодировать эти страницы?

2. На самом деле гораздо больше информации я мог бы извлечь, если бы зашёл в свой эккаунт, но для этого нужно ввести имя/пароль и captcha. Мне всё понятно, кроме captcha

Python:
from urllib.request import urlopen
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
. . .
driver = webdriver.Chrome()
driver.get(URL_ADDR)

elem_name = driver.find_element_by_name("username")
elem_name.send_keys("user_х@gmail.com")

elem_pass = driver.find_element_by_name("password")
elem_pass.send_keys("qwerty")

# это не работает - elem_capt = driver.find_element_by_class_name("recaptcha-checkbox-checkmark")
# это не работает - elem_capt = driver.find_element_by_class_name("rc-anchor-center-item rc-anchor-checkbox-holder")
elem_capt = driver.find_elements_by_class_name("recaptcha-checkbox goog-inline-block recaptcha-checkbox-unchecked rc-anchor-checkbox")

#дальше непонятно как выбрать checkbox и поставить галочку !

elem_name.send_keys(Keys.RETURN)
. . .

Прошу подсказать, как выбрать checkbox и поставить галочку ! (см. captcha.jpg )
 

Вложения

  • портфолио.jpg
    портфолио.jpg
    296,4 КБ · Просмотры: 4
  • captcha.jpg
    captcha.jpg
    123,7 КБ · Просмотры: 6
  • сравнение.jpg
    сравнение.jpg
    543,5 КБ · Просмотры: 6
  • diff.zip
    191,8 КБ · Просмотры: 0
Последнее редактирование:

straannick

Новичок
Пользователь
Янв 12, 2021
2
0
1
Нет идей?
 

Форум IT Специалистов