Я делаю сторонний проект для развлечения, чтобы автоматизировать сайт https://10fastfingers.com/, чтобы Selenium автоматически завершил все достижения сайта.Вы можете найти мой текущий код в моем хранилище: https://github.com/jasperan/pyfastfingers
Однако я столкнулся с проблемой со страницей входа:
https://10fastfingers.com/login
Селен не позволяетЯ могу сразу найти следующие теги HTML, соответствующие значения xpath которых представлены ниже:
//*[@id="UserEmail"]
[//*[@id="UserPassword"]
Кажется, что веб-сайт не загружает их правильно с первого раза, потому что даже когда я проверяю этивручную (с помощью моего собственного веб-клиента, Firefox, Chrome или даже Chromium, но запущенного мной ...) я автоматически перенаправляюсь к его прародителю:
/html/body
Когда я обнаружил этот элемент вручную,после второй проверки я могу перенаправить на желаемые элементы электронной почты и пароля.
Однако программно я не могу этого сделать.Независимо от того, сколько раз я пытаюсь найти элемент, он не находит его должным образом, каждый раз выдает следующее исключение:
File "pyfastfingers.py", line 112, in <module>
main()
File "pyfastfingers.py", line 100, in main
do_login(driver)
File "pyfastfingers.py", line 74, in do_login
password = driver.find_element_by_xpath('[//*[@id="UserPassword"]')
File "/home/j/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 394, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "/home/j/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 978, in find_element
'value': value})['value']
File "/home/j/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/home/j/.local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: Unable to locate an element with the xpath expression [//*[@id="UserPassword"] because of the following error:
SyntaxError: Failed to execute 'evaluate' on 'Document': The string '[//*[@id="UserPassword"]' is not a valid XPath expression.
(Session info: chrome=74.0.3729.169)
(Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Linux 4.18.0-21-generic x86_64)
Вот некоторый код, который соответствует моей функции входа в систему:
driver.get('https://10fastfingers.com/login')
placeholder = driver.find_element_by_xpath('/html/body')
email = driver.find_element_by_xpath('//*[@id="UserEmail"]')
password = driver.find_element_by_xpath('[//*[@id="UserPassword"]')
email.send_keys(os.environ['FINGERS_EMAIL'])
password.send_keys(os.environ['FINGERS_PASSWORD'])
login_button = driver.find_element_by_id('login-form-submit')
login_button.click()
# Login complete
Вы можете найти полный код в моем хранилище.