【问题标题】:Can't seem to be able to click on an element using selenium and python似乎无法使用 selenium 和 python 点击​​元素
【发布时间】:2019-07-21 19:42:31
【问题描述】:

我正在尝试单击“最有帮助的优先”下拉列表并将其更改为 android playstore 应用程序的最新评论。

https://play.google.com/store/apps/details?id=com.nintendo.zama&showAllReviews=true

通过查找类和 xpath 也尝试了多种方法,例如以下方法,但没有任何效果。

new_comments = driver.find_element_by_link_text('"Most helpful first"').click()

【问题讨论】:

    标签: python-3.x selenium xpath webdriverwait xpath-1.0


    【解决方案1】:

    click() 元素上的文本为 首先最有帮助,然后click() 元素上的文本为 最新 您需要诱导 WebDriverWait 为所需的element_to_be_clickable(),您可以使用以下Locator Strategy

    • 使用XPATH

      driver.get('https://play.google.com/store/apps/details?id=com.nintendo.zama&showAllReviews=true')
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//h2[text()='Reviews']//following::span[text()='Most helpful first'][1]"))).click()
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//h2[text()='Reviews']//following::span[text()='Most helpful first'][1]//following::span[text()='Newest']"))).click()
      
    • 注意:您必须添加以下导入:

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

    浏览器快照:

    【讨论】:

      【解决方案2】:

      您应该对链接文本使用find_element_by_link_text 方法。

      例如,考虑这个页面来源:

      <html>
      <body>
        <p>Are you sure you want to do this?</p>
        <a href="continue.html">Continue</a>
        <a href="cancel.html">Cancel</a>
      </body>
      <html>
      

      所以如果你想通过链接文本点击:

      continue_link = driver.find_element_by_link_text('Continue')
      continue_link = driver.find_element_by_partial_link_text('Conti')
      

      但是,在您的情况下,“最有帮助的第一”文本不是链接文本,它位于 &lt;span&gt; 标记中。

      所以你可以使用driver.find_element_by_css_selector 方法或driver.find_element_by_xpath 方法:

      CSS

      driver.find_element_by_css_selector('.KKjvXb > span');
      

      XPATH

      driver.find_element_by_xpath("//span[text() = 'Most helpful first']");
      

      【讨论】:

        【解决方案3】:

        不是这个元素,你应该使用其他元素并使用 send_keys,要检查它你需要按 F12 并注意突出显示“最有帮助的优先”字段的元素。它是您已经在寻找的那个元素的父类,对我来说是这样的:

        from selenium.webdriver.common.keys import Keys
        driver.find_element_by_xpath('//*[@class="MocG8c UFSXYb LMgvRb KKjvXb"]').send_keys(Keys.ARROW_DOWN, Keys.ARROW_DOWN)
        

        然后你看到另一个列表,你需要从列表中找到好的元素:

        driver.find_elements_by_xpath('//div[@jsname="wQNmvb"]')[-3].click()
        

        我使用索引 -3 因为有 6 个元素具有相同的 xpath。

        【讨论】:

          【解决方案4】:

          在浏览器控制台中尝试并使用 javascript executor 执行它::

          $x("(//span[text()='最有帮助的优先'])[1]")[0].click();

          【讨论】:

            【解决方案5】:

            我设法做到了。

            dropdown = driver.find_element_by_xpath('//*[@id="fcxH9b"]/div[4]/c-wiz/div/div[2]/div/div[1]/div/div/div[1]/div[2]/c-wiz/div[1]/div/div[1]/div[2]').click()
            sleep(2)
            new_comments = driver.find_element_by_xpath('//*[@id="fcxH9b"]/div[4]/c-wiz/div/div[2]/div/div[1]/div/div/div[1]/div[2]/c-wiz/div[1]/div/div[2]/div[1]').click()
            

            【讨论】:

              猜你喜欢
              • 2020-05-01
              • 1970-01-01
              • 2018-02-27
              • 2020-03-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-12-08
              相关资源
              最近更新 更多