设置
尝试使用Python和Selenium登录this log-in form。
代码
url = 'https://activeshop.com.pl/customer/account/login/'
browser.get(url)
# fill out login details
account_name = 'my@email.com'
password = 'mypassword'
login_details = {
'login': account_name,
'password': password
}
# inserts account name in login field
fill_field('id','email',login_details['login'])
# inserts password in password field
fill_field('id','pass',login_details['password'])
哪里
def fill_field(type, type_path, input):
if type == 'id':
field = browser.find_element_by_id(type_path)
field.clear()
field.send_keys(input)
问题
上面的代码曾经可以工作,但是由于站点已进行了改头换面,因此在尝试填写字段时会产生ElementNotInteractableException: element not interactable
。
我尝试了Xpaths
,CSS
选择器和其他选择器,但未填写电子邮件地址和密码。
我可以通过Selenium获取页面上的文本。
在input
元素处有一些元素会阻止Selenium。有任何想法吗?
答案 0 :(得分:3)
页面上有1个以上的email
,第一个不可见。您可以获取所有元素,然后过滤可见的元素:
field = list(filter(lambda x: x.is_displayed(), browser.find_elements(By.ID, "email")))[0]
field.send_keys("email")
答案 1 :(得分:1)
要将字符序列发送到电子邮件和Hasło字段,您需要为element_to_be_clickable()
诱导 WebDriverWait ,您可以使用以下Locator Strategy:
使用XPATH
:
driver.get("https://activeshop.com.pl/customer/account/login/")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='E-mail']//following::input[@class='input-text' and @id='email']"))).send_keys("my@email.com")
driver.find_element_by_xpath("//span[text()='Hasło']//following::input[@class='input-text' and @title='Hasło']").send_keys("mypassword")
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
浏览器快照: