Обзор
Похоже, у вас возникла проблема с XPATH, когда вы обнаружили, что кнопка «Отправить» или ваша кнопка «Отправить» недоступна, или к вашей кнопке «Отправить» прикреплены некоторые события на стороне клиента (javascript / etc), которые необходимы для эффективной отправки страницы.
Вызов метода pw.submit () в большинстве случаев должен избавить от необходимости ждать, пока кнопка отправки станет кликабельной, и избежать проблем с поискомкнопка в большинстве случаев.На многих других веб-сайтах некоторые из необходимых внутренних процессов запускаются действиями на стороне клиента, которые выполняются после того, как кнопка «отправить» фактически нажата (хотя для примечания это не считается наилучшей практикой, посколькусайт менее доступен и т. д. я отвлекся).Прежде всего, важно следить за выполнением вашего скрипта и следить за тем, чтобы на веб-странице не отображалось никаких заметных ошибок в отношении учетных данных, которые вы отправляете.
Кроме того, однако, некоторые веб-сайты требуют, чтобы выдобавить определенное минимальное количество времени между вводом имени пользователя, пароля и отправкой страницы, чтобы она считалась действительным процессом отправки.Я даже заходил на веб-сайты, которые требуют от вас использовать send_keys 1 для имен пользователей и паролей, чтобы избежать использования некоторых технологий защиты от взлома.В этих случаях я обычно использую следующее между вызовами:
from random import random, randint
def sleepyTime(first=5, second=10):
# returns the value of the time slept (as float)
# sleeps a random amount of time between the number variable in first
# and the number variable second (in seconds)
sleepy_time = round(random() * randint(first, second), 2)
sleepy_time = sleepy_time if sleepy_time > first else (first + random())
sleep(sleepy_time)
return sleepy_time
Я не вижу, что вы используете для создания глобальных переменных _email и _password, если только они не изменяются где-то в функции входа в системуи вы хотите, чтобы это изменение было перенесено на другие сферы.
Как бы я попытался его решить
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoSuchElementException, TimeoutException
TIME_TIMEOUT = 20 # Twenty-second timeout default
def eprint(*args, **kwargs):
""" Prints an error message to the user in the console (prints to sys.stderr), passes
all provided args and kwargs along to the function as usual. Be aware that the 'file' argument
to print can be overridden if supplied again in kwargs.
"""
print(*args, file=sys.stderr, **kwargs)
def login(driver):
global _email, _password
try:
email = WebDriverWait(driver, TIME_TIMEOUT).until(EC.presence_of_element_located((By.XPATH, "//input[@id='user_email']")))
pw = WebDriverWait(driver, TIME_TIMEOUT).until(EC.presence_of_element_located((By.XPATH, "//input[@id='password']"))
pw.submit()
# if this doesn't work try the following:
# btn_submit = WebDriverWait(driver, TIME_TIMEOUT).until(EC.element_to_be_clickable((By.XPATH, "//button[@track-element='click-for-login']"))
# btn_submit.click()
# if that doesn't work, try to add some random wait times using the
# sleepyTime() example from above to add some artificial waiting to your email entry, your password entry, and the attempt to submit the form.
except NoSuchElementException as ex:
eprint(ex.msg())
except TimeoutException as toex:
eprint(toex.msg)
if __name__ == '__main__':
driver = webdriver.Chrome('/usr/bin/chromium/chromedriver',chrome_options=chrome_options)
#d.get('https://www.google.nl/')
#driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.goeventz.com/')
if login(driver) is not None:
print(create_event(driver))