如何在Python中使用Selenium单击按钮?

时间:2019-07-11 12:16:44

标签: python selenium-webdriver

我正在尝试使用Python和Selenium在Google Play网站页面上抓取应用程序上的评论数据。我在这里要做的是单击“完整评论”按钮以查看每个评论的全文。

但是我每次都会遇到这些错误:

ElementNotInteractableException: Message: element not interactable

AttributeError: 'list' object has no attribute 'click'

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".LkLjZd ScJHi OzU4dc  "}

按钮的元素是这样的:

<button class="LkLjZd ScJHi OzU4dc  " jsaction="click:TiglPc" jsname="gxjVle">Full Review</button>

按钮的xpath是这样的:

//*[@id="fcxH9b"]/div[4]/c-wiz/div/div[2]/div/div[1]/div/div/div[1]/div[2]/div/div[26]/div/div[2]/div[2]/span[1]/div/button

这是我用于xpath的代码:

full_review = driver.find_elements_by_xpath('//*[@id="fcxH9b"]/div[4]/c-wiz/div/div[2]/div/div[1]/div/div/div[1]/div[2]/div/div[26]/div/div[2]/div[2]/span[1]/div/button')
full_review.click()

我无法通过类名,xpath或其他任何东西找到按钮。 谁能帮我解决这个问题?另外,是否可以通过jsname查找元素? 如果您能提供帮助,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

尽可能避免使用xpath,它是最脆弱的选择器。

id> CSS> Xpath

对于您的按钮,此CSS选择器应该起作用:

button[jsname='gxjVle']

您可能需要指定孩子,因为孩子可能不是唯一的

答案 1 :(得分:0)

  1. 您的XPath选择器有些不稳定,您可以将其简化为:

    //button[text()='Full Review']
    
  2. 您使用的是错误的函数,如果您正在寻找一个唯一的元素,则应该使用WebDriver.find_element_by_xpath,请注意,element,而不是elements
  3. 最好使用Explicit Wait,以防DOM中元素不能立即可用(例如,如果您是testing application built using AJAX technology

假设以上所有条件

full_review = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Full Review']")))