Selenium Webdriver останавливается без сообщения об ошибке при навигации через PayPal логин - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь зайти на paypal.com и сделать платеж автоматически.

Программа успешно загружает страницу входа (https://www.paypal.com/us/signin) и вводит электронное письмо, но когда я нажимаю на следующеекнопка веб-драйвер неожиданно закрывается, не генерируя сообщение об ошибке.

Кто-нибудь сталкивался с этой проблемой раньше? Может быть потому, что следующая кнопка - скрытая капча, чтобы роботы не могли войти в систему?

Я уже пытался использовать time.sleep (3), чтобы дать странице время для загрузки. Я не вижу никаких других проблем с кодом.

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.keys import Keys


def paypal_pay(): # pass in user address

    driver = webdriver.Chrome()

    timeout = 20
    paypal = "https://www.paypal.com/us/signin"

    driver.get(paypal)
    email = "emailstuff@gmail.com"
    emailElement = driver.find_element_by_id('email')
    print(emailElement)
    emailElement.send_keys(email)
    time.sleep(3)
    nextElement = driver.find_element_by_id('btnNext').click()


def main():
    paypal_pay()
main()

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Ваш код работает нормально, но способ, который вы реализовали, вызывает проблему, я имею в виду, что вы используете метод main() и что он будет делать, как только этот метод будет вызван и выполнен, он закроет всесоединения в конце.Следовательно, причина, по которой ваш браузер также закрывается без каких-либо ошибок, потому что ваш код работает нормально до тех пор:

Попробуйте приведенный ниже модифицированный код без основного метода, который работает совершенно нормально:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome("chromedriver.exe");

paypal = "https://www.paypal.com/us/signin"

driver.get(paypal)
email = "hello@gmail.com"
emailElement = driver.find_element_by_id('email')
print(emailElement)
emailElement.send_keys(email)
time.sleep(3)
nextElement = driver.find_element_by_id('btnNext').click()

print("=> Done...")

Для получения дополнительной информацииинформация по main(), ссылка по этой ссылке

Надеюсь, это поможет ...

0 голосов
/ 17 февраля 2019

Когда я запускаю ваш код После нажатия следующей кнопки браузер Chrome аварийно завершает работу, и в консоли я вижу следующую ошибку:

<selenium.webdriver.remote.webelement.WebElement (session="577ff51b46a27eefeda43ccd320db48b", element="0.571535141628553-1")>

Это означает, что вам нужно запустить RemoteWebDriver вместо ChromeDriver.

Шаг 1: Загрузите Selenium Standalone Server по следующей ссылке

https://www.seleniumhq.org/download/

Шаг 2: откройте командную строку, как администратор, перейдите по загруженному пути и введите приведенную ниже команду и нажмите ввод

java -jar selenium-server-standalone-3.141.59.jar

Шаг 3. Чтобы убедиться, что концентратор работает, откройте браузер и введите следующий URL-адрес. По умолчанию используется порт концентратора 4444

http://localhost:4444/grid/console

Шаг 4: Используйте следующееcode.Если вы правильно выполните вышеперечисленные шаги, он должен прекрасно работать с кодом ниже.

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

def paypal_pay(): # pass in user address


    desired_caps = DesiredCapabilities.CHROME
    grid_url = "http://localhost:4444/wd/hub"
    driver = webdriver.Remote(desired_capabilities=desired_caps, command_executor=grid_url)
    paypal = "https://www.paypal.com/us/signin"
    driver.get(paypal)
    email = "emailstuff@gmail.com"
    emailElement = driver.find_element_by_id('email')
    print(emailElement)
    emailElement.send_keys(email)
    nextElement = driver.find_element_by_id('btnNext')
    nextElement.click()


def main():
    paypal_pay()
main()

Пожалуйста, дайте мне знать, если это работает для вас. Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...