如何使用Selenium和Python在codeur.com登录页面上找到并单击提交按钮

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

我想使我的开幕会议自动化,因此,在完成了关于Stackoverflow的一些教程和其他问题之后,我做了以下工作:

import selenium  

from selenium import webdriver

driver = webdriver.Safari()


driver.get('https://www.codeur.com/users/sign_in')


id_box = driver.find_element_by_name('user_email')

id_box.send_keys(my_mail)

# Find password box
pass_box = driver.find_element_by_name('user_password')
# Send password
pass_box.send_keys(my_password)
# Find login button
login_button = driver.find_element_by_name('commit')
# Click login
login_button.click()

我收到以下错误:

line 321, in execute
    self.error_handler.check_response(response)
line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: 


Process finished with exit code 1

是因为我错过了提交按钮的正确名称?

我认为对应的html是:

<span class="recaptcha-button-enabled">
<input type="submit" name="commit" value="Se connecter" class="btn btn-primary btn-lg btn-block" data-disable-with="Se connecter">
</span>
<span class="recaptcha-button-disabled" style="display: none">
<input type="submit" name="commit" value="Connexion en cours…" class="btn btn-primary btn-lg btn-block" disabled="disabled" data-disable-with="Connexion en cours…">
</span>
python selenium xpath css-selectors webdriverwait
4个回答
1
投票

[Submit]按钮上有一个重叠的元素,因此您可以使用其xpath单击该元素,对于用户名和密码字段,应使用id而不是name来获取该元素。

您的代码应类似于:

import selenium  

from selenium import webdriver

driver = webdriver.Safari()


driver.get('https://www.codeur.com/users/sign_in')


id_box = driver.find_element_by_id("user_email")

id_box.send_keys(my_mail)

# Find password box
pass_box = driver.find_element_by_id("user_password")
# Send password
pass_box.send_keys(my_password)
# Find login button
login_button = driver.find_element_by_xpath("//span[@class='recaptcha-button-enabled']")
# Click login
login_button.click()

但是,单击页面上的Submit按钮后会显示验证码,所以我认为您将无法继续进行自动化。


0
投票

使用类似名称:

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

element = WebDriverWait(driver, 20).until(
EC.element_to_be_clickable((By.NAME, "commit")))

element.click();

0
投票

最后,如果我将两个“ find_element_by_name”都替换为“ find_element_by_id”,则代码会更好地工作;但在Safari中,它似乎不会单击。我改用Chrome(),但在那种情况下,我需要下载“ chromedriver”并指明其路径:

driver = webdriver.Chrome(executable_path='path_to_the_folder_where_chromedriver_is/chromedriver')

然后运行正常(但是网站随后要求完成验证码,所以我想这有点像是自动化道路的尽头...)


0
投票

提交按钮连接器通知重叠。您可以将Scroll up的元素诱导为WebDriverWait,也可以使用以下element_to_be_clickable()之一:

  • 使用Locator Strategies

    CSS_SELECTOR
  • 使用driver.get('https://www.codeur.com/users/sign_in') WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#user_email"))).send_keys("[email protected]") driver.find_element_by_css_selector("input#user_password").send_keys("Netchaiev") driver.execute_script("return arguments[0].scrollIntoView(true);", driver.find_element_by_css_selector("input[value='Se connecter']")) driver.find_element_by_css_selector("input[value='Se connecter']").click()

    XPATH
  • :您必须添加以下导入:

    driver.get('https://www.codeur.com/users/sign_in')
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='user_email']"))).send_keys("[email protected]")
    driver.find_element_by_xpath("//input[@id='user_password']").send_keys("Netchaiev")
    driver.execute_script("return arguments[0].scrollIntoView(true);", driver.find_element_by_xpath("//input[@value='Se connecter']"))
    driver.find_element_by_xpath("//input[@value='Se connecter']").click()
    
  • 浏览器快照:

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

© www.soinside.com 2019 - 2024. All rights reserved.