我需要帮助,这是我的脚本:
# Imports
from selenium import webdriver
url = "https://sjc.cloudsigma.com/ui/4.0/login"
d = webdriver.Chrome()
d.get(url)
escolhe = d.find_elements_by_xpath('//*[@id="trynow"]')
escolhe.click()
这就是html的样子:
<button id="trynow" class="btn g-recaptcha block full-width m-b dwse btn-warning" ng-class="{'btn-danger': instantAccess=='Error', 'btn-success': instantAccess=='Success', 'btn-warning': instantAccess=='Working', 'btn-warning': (instantAccess!='Working' && instantAccess!='Success' && instantAccess!='Error')}" data-ng-disabled="instantAccess=='Working' || instantAccess=='Success' || instantAccess=='Error'" analytics-on="click" analytics-event="Guest logged in" analytics-category="Guest logged in" analytics-label="Guest logged in" data-sitekey="6Lcf-2MUAAAAAKG8gJ-MTkwwwVw1XGshqh8mRq25" data-callback="onTryNow" data-size="invisible">
<span name="btn-warning" class="default " style="font-size: 20px;">
<i class="fa fa-thumbs-up"></i> Instant access
<p style="font-size: 9px;font-style: italic;margin: 2px 0px;" class="ng-binding">No credit card is required</p>
</span>
<span name="btn-warning" class="working hide" disabled=""><i class="fa fa-spinner fa-spin"></i> Instant access...</span> <span name="btn-success" class="success hide" disabled=""><i class="fa fa-spinner fa-spin"></i> Entrar na sessão</span> <span name="btn-danger" class="error hide" disabled=""><i class="fa fa-exclamation-circle"></i> Erro</span>
</button>
我需要帮助,因为每当我把xpath这个错误:
属性错误:"list"对象没有属性"click"查找element
而不是elements
。
from selenium import webdriver
import time
url = "https://sjc.cloudsigma.com/ui/4.0/login"
d = webdriver.Chrome(executable_path='C:/bin/chromedriver.exe')
d.get(url)
time.sleep(5) #Wait a little for page to load.
escolhe = d.find_element_by_xpath('//*[@id="trynow"]/span[1]')
escolhe.click()
您必须编写元素而非元素-->即使只有一个项目,它也会将其视为一个列表。你必须这样修改:
from selenium import webdriver
url = "https://sjc.cloudsigma.com/ui/4.0/login"
d = webdriver.Chrome()
d.get(url)
escolhe = d.find_element_by_xpath('//*[@id="trynow"]')
escolhe.click()
此错误消息。。。
AttributeError: 'list' object has no attribute 'click'
意味着您已尝试在list元素上调用click()
方法,其中在WebElement上调用asclick()
。
解决方案
要点击所需元素,您可以使用以下定位策略之一:
使用
css_selector
:driver.find_element_by_css_selector("button#trynow").click()
使用
xpath
:driver.find_element_by_xpath("//button[@id='trynow']").click()
理想情况下,要点击需要诱导WebDriverWait等待element_to_be_clickable()
的元素,您可以使用以下定位器策略之一:
使用
CSS_SELECTOR
:driver.get('https://sjc.cloudsigma.com/ui/4.0/login') WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button#trynow"))).click()
使用
XPATH
:driver.get('https://sjc.cloudsigma.com/ui/4.0/login') WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@id='trynow']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
您的代码返回一个web元素列表。可以点击网页元素。您需要通过索引选择列表中的一个网页元素,例如:
escolhe = d.find_elements_by_xpath('//*[@id="trynow"]')
escolhe[0].click() #first element
或者使用find_element_by_xpath返回与xpath定位器匹配的第一个元素:
escolhe = d.find_element_by_xpath('//*[@id="trynow"]')
escolhe.click()
如果您使用id定位器策略,我还建议使用find_element_by_id:
escolhe = d.find_element_by_id('trynow')
escolhe.click()