python中的硒错误:NoSuchElementException ./ancestor-or-self::form

时间:2019-12-10 11:37:35

标签: javascript python html selenium twitter

我正在尝试制作一个python脚本,我将在python控制台中输入我的凭据和tweet文本,然后该脚本将使用selenium登录,然后进行tweet。所有任务都已完成。最后一次单击“ Tweet”按钮会引发错误。

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: ./ancestor-or-self::form

这是与tweet按钮相关的检查元素代码:

<div class="css-1dbjc4n r-urgr8i r-42olwf r-sdzlij r-1phboty r-rs99b7 r-1w2pmg r-1n0xq6e 
r-1vuscfd r-1dhvaqw r-icoktb r-1fneopy r-o7ynqc r-6416eg r-lrvibr" 
aria-haspopup="false" disabled="" role="button" aria-disabled="true" 
data-testid="tweetButtonInline"> 
  <div class="css-901oao r-1awozwy r-jwli3a r-6koalj r-18u37iz r-16y2uox r-1qd0xha r-a023e6 
  r-vw2c0b r-1777fci r-eljoum r-dnmrzs r-bcqeeo r-q4m81j r-qvutc0" dir="auto">
    <span class="css-901oao css-16my406 css-bfa6kz r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0">
    <span class="css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0">Tweet
    </span>
    </span>
  </div>
</div>

现在,我想选择按钮并单击它。所以我写了如下的python代码:

ultim=driver.find_element_by_xpath('//span[@class="css-901oao css-16my406 r-1qd0xha r-ad9z0
r-bcqeeo r-qvutc0"]')
ultim.click()   

OR

ultim=driver.find_element_by_xpath('//span[@data-testid="tweetButtonInLine"]')
ultim.click()

请帮我在python中使用硒单击那个Tweet按钮。 我需要制作此脚本并提交学校项目。 需要帮助,感谢您。

3 个答案:

答案 0 :(得分:2)

以下代码可以发布测试推文(请更改您的推文内容,用户名和密码):

with params as (
      select 'abc123' as x
     )
select x, x*2
from params cross join
     . . . 

enter image description here

您只需指向您想要xpath的元素并执行以下操作即可复制xpath: enter image description here


请注意:不建议使用xpath。

答案 1 :(得分:2)

促使WebDriverWaitelement_to_be_clickable()单击Tweet按钮。

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,'//span[text()="Tweet"]'))).click()

您需要导入以下库。

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

答案 2 :(得分:1)

尝试使用以下xpath:

ultim=driver.find_element_by_xpath('//span[normalize-space(text()="Tweet"]')
ultim.click()