【问题标题】:Selenium Error in python : NoSuchElementException ./ancestor-or-self::formpython中的Selenium错误:NoSuchElementException ./ancestor-or-self::form
【发布时间】:2020-04-03 14:04:41
【问题描述】:

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

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

这里是与推文按钮相关的检查元素代码:

<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()   

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

请帮我在 python 中使用 selenium 来点击 Tweet 按钮。 我需要制作这个脚本并提交给学校项目。 需要帮助,非常感谢。

【问题讨论】:

    标签: javascript python html selenium twitter


    【解决方案1】:

    诱导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
    

    【讨论】:

    • 它有效,我只需要两次粘贴同一行,因为它要求确认推文。非常感谢:D
    【解决方案2】:

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

    from selenium import webdriver
    
    url = 'https://twitter.com/login'
    
    username = 'your email'
    password = 'your password'
    tweet_data = 'This is a test.'
    driver = webdriver.Chrome(executable_path=r'yourpath')
    driver.maximize_window()
    driver.get(url)
    
    userid = driver.find_element_by_xpath('//*[@id="page-container"]/div/div[1]/form/fieldset/div[1]/input')
    userid.send_keys(username)
    
    psw = driver.find_element_by_xpath('//*[@id="page-container"]/div/div[1]/form/fieldset/div[2]/input')
    psw.send_keys(password)
    
    signinButton = driver.find_element_by_xpath('//*[@id="page-container"]/div/div[1]/form/div[2]/button')
    signinButton.click()
    
    driver.implicitly_wait(10)
    
    loggenInUrl = "https://twitter.com/home"
    
    driver.get(loggenInUrl)
    tweet = driver.find_element_by_xpath('//*[@id="react-root"]/div/div/div/main/div/div/div/div[1]/div/div[2]/div[2]/div[1]/div/div/div[2]/div[1]/div/div/div/div/div/div/div/div[1]/div[1]/div/div/div/div[2]/div/div/div/div')
    tweet.send_keys(tweet_data)
    
    post = driver.find_element_by_xpath('//*[@id="react-root"]/div/div/div/main/div/div/div/div[1]/div/div[2]/div[2]/div[1]/div/div/div[2]/div[2]/div/div/div[2]/div[3]/div/span/span')
    post.click()
    

    您可以简单地通过指向您想要 xpath 的元素来复制 xpath,然后执行以下操作:


    请注意:不推荐使用这种方式 xpath。

    【讨论】:

    • 你能不能只为 Tweet 按钮写一个 xpath 并在评论中回复。这是我面临的唯一问题。请
    • 这对我来说非常好,并发布一条推文,如我的回答所示。
    • 您能告诉我,您是如何编写按钮的 xpath 的吗?你算过所有的数了吗?如果是或否,请解释。
    • 您可以将元素指向检查元素并右键单击它并复制xpath。请用图片查看我的更新答案。这能解决您的问题吗?
    【解决方案3】:

    试试下面的 xpath:

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

    【讨论】:

    • selenium.common.exceptions.NoSuchElementException: 消息:无法定位元素://span[text()="tweet"] 不工作
    猜你喜欢
    • 2020-04-24
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 2017-10-15
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多