python selenium, преодолей всплывающее окно javascript

#javascript #python #selenium #popup

#javascript #python #селен #всплывающее окно

Вопрос:

Я работаю над проектом, и мне нужно зайти на сайт и бросить туда сою. Я пытаюсь сделать это с помощью модуля Python selenium, но когда я захожу на сайт с помощью бота, я получаю всплывающее окно (форма принятия файлов cookie). Я не могу добиться того, что пытаюсь сделать, не нажимая accept.

введите описание изображения здесь

Я проверил сетевой раздел сайта и обнаружил сайт, содержащий файлы cookie, когда я захожу на этот сайт, код работает правильно, и ему удается нажать кнопку «Принять файлы cookie», но у меня это не работает, потому что он даже не может найти кнопку «Принять» на главном сайте, я знаю, что это не потому, чтоон написан на javascript, но я не знаю, как это сделать.

В любом случае, давайте перейдем к части кода.

на сайте я пытаюсь войти в систему

сайт, который отправил форму cookie, использует сайт

этот код работает для этого:

 from selenium import webdriver
import time
from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

option = webdriver.ChromeOptions()
option.add_argument('--disable-notifications')
option.add_argument("--mute-audio")

driver = webdriver.Chrome("chromedriver.exe", options=option)


driver.get('https://consent-pref.trustarc.com/?type=jefftest_ibmamp;site=ibm.comamp;action=noticeamp;country=tramp;locale=tramp;behavior=expressedamp;gtm=1amp;layout=default_euamp;irm=undefinedamp;from=https://consent.trustarc.com/#')


time.sleep(10)
driver.find_elements_by_class_name("call")[0].click()
 

но это не работает для другого, как я могу заставить это работать и для другого?

Ответ №1:

Вместо этого вы могли бы использовать pyautogui для стимулирования нажатия:

 import pyautogui

pyautogui.click(x=100, y=200)
 

Комментарии:

1. мой код уже работает для этого сайта, это сайт, который не работает 🙂

2. После нескольких попыток я нашел правильные координаты, и это сработало, поэтому я хочу спросить вас кое о чем, есть ли способ найти координаты прямой кнопки без попыток?

3. Я не думаю, что есть. Вы могли бы использовать pyautogui.position() для получения позиции и использовать команды try и except, чтобы попытаться выяснить, где находится кнопка, но, насколько мне известно, нет прямого способа получить местоположение кнопки с помощью pyautogui

Ответ №2:

Ответ @The Pilot Dude работает определенным образом, но нельзя сказать, что он очень динамичный, поэтому:

Я зашел на сайт с оригинальным Chrome, принял файлы cookie и сохранил эти файлы cookie. Когда мне пришлось повторно зайти на сайт позже, я перезагрузил файлы cookie.

для загрузки файлов cookie:

 import pickle
import time
from selenium import webdriver

option = webdriver.ChromeOptions()
option.add_argument("--disable-notifications")
option.add_argument("--mute-audio")
option.add_argument("user-data-dir=C:\Users\___*******__\AppDataLocal\Google\Chrome\User Data")
driver = webdriver.Chrome(options = option)

driver.get('https://speech-to-text-demo.ng.bluemix.net/')

time.sleep(10)#in this time I accepted cookies

pickle.dump(driver.get_cookies(), open("cookies.pkl","wb"))#for download cookies
 

и после этого я могу использовать файлы cookie для chromedriver.exe

для использования файлов cookie:

 import pickle
from selenium import webdriver

option = webdriver.ChromeOptions()
option.add_argument("--disable-notifications")
option.add_argument("--mute-audio")
driver = webdriver.Chrome("chromedriver.exe", options = option)

driver.get('https://speech-to-text-demo.ng.bluemix.net/')

file = open("cookies.pkl","rb")
cookies = pickle.load(file)
for cookie in cookies:
    driver.add_cookie(cookie)#for use cookies
file.close()