Как автоматически войти в систему с Python Selenium, если есть скрытые поля? - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь автоматически войти на сайт, форма входа которого выглядит следующим образом:

<form class="login" id="vbLogin" method="post" action="/forum/login.php?do=login">
<input type="hidden" name="do" value="login">
<input type="hidden" name="vb_login_md5password">
<input type="hidden" name="vb_login_md5password_utf">
<input type="hidden" name="s" value="">
<input name="vb_login_username" value="" id="login" type="text" placeholder="Login">
<input name="vb_login_password" value="" class="input" id="password" type="password" placeholder="Password">
<div class="spacerLogin"></div>
<input type="submit" class="submit" value="Login">
<label for="rememberme" class="rememberme">
<input type="checkbox" name="cookieuser" value="1" id="rememberme" checked="checked"> Remember me
</label>
<div class="divider"></div>
<a class="c-header__login__pwdretrieve" href="/forum/login.php?do=lostpw" title="Retrieve lost password">Forgot your password?</a>
<input name="url" type="hidden" value="/product_list/A"></form>

В Python / Selenium я отправил имя пользователя / пароль следующим образом, но я не знаю, как что делать со скрытыми полями и как применить отправку.

from selenium import webdriver
driver=webdriver.Chrome("C:\\chromedriver_win32\\chromedriver.exe")
driver.get("https://www.samplesite.it/forum/login.php?do=login")
username_textbox=driver.find_element_by_id("login")
username_textbox.send_keys("pinco@tin.it")
driver.implicitly_wait(4)
password_textbox=driver.find_element_by_id("password")
password_textbox.send_keys("pallino")
driver.implicitly_wait(4)
login_button=driver.find_element_by_value("Login")
driver.implicitly_wait(4)
login_button.submit()
driver.set_page_load_timeout(30)
driver.get("https://www.samplesite.it/product_list/A")
with open("C:\\mydir\\product_list.html", "w") as f:
    f.write(str(driver.page_source.encode('utf-8')))

Буду очень признателен, если кто-нибудь сможет мне помочь.

1 Ответ

0 голосов
/ 09 января 2020

Пример HTML, которым вы поделились, и элементы кода, которые вы сделали, не совпадают точно.

Однако Если вышеприведенный HTML правильный, то для обработки динамических c элементов индуцируйте WebDriverWait () и дождитесь element_to_be_clickable ()

Код :

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By


driver=webdriver.Chrome("C:\\chromedriver_win32\\chromedriver.exe")
driver.get("https://www.samplesite.it/forum/login.php?do=login")
username_textbox=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.NAME,"vb_login_username")))
username_textbox.send_keys("pinco@tin.it")
password_textbox=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.NAME,"vb_login_password")))
password_textbox.send_keys("pallino")
login_button=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"input.submit[value='Login']")))
login_button.click()
...