如果存在隐藏字段,如何自动使用Python Selenium登录?

问题描述 投票:0回答:1

我正在尝试自动登录到其登录表单如下所示的网站:

<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("[email protected]")
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')))

如果有人可以帮助我,我将非常感激。

python selenium authentication selenium-chromedriver hidden
1个回答
0
投票

您共享的示例HTML和您完成的代码元素不完全匹配。

但是如果以上HTML正确,则处理动态元素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("[email protected]")
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()
© www.soinside.com 2019 - 2024. All rights reserved.