python中的硒。试图选择元素

时间:2019-10-05 21:00:52

标签: python selenium

更新:我在最初的帖子中发现了导致此问题的原因,但不知道如何解决。这是我的更多代码。我首先进行了搜索,然后我在firefox中的页面跳到了www.flickr.com/searc/?text=volleybal。 但显然我的浏览器对象仍然位于www.flickr.com。我该如何更新?

from selenium import webdriver
browser = webdriver.Firefox()
browser.get('https://www.flickr.com')
s = browser.find_element_by_id('search-field')
s.send_keys('volleyball')
s.submit()
s = browser.find_element_by_class_name("style-button")
#s = browser.find_element_by_xpath("//li[@data-style-value = 'minimalism']")
s.click()

原始帖子:

我正在尝试硒,我想选择以下元素:

<li class="style-button minimalist" data-style-value="minimalism" data-tooltip-title="Minimalist" tabindex="0" role="button" aria-label="Minimalist">

我尝试了以下方法,但没有一个起作用:

s = browser.find_element_by_class_name("style-button minimalist")

s = browser.find_element_by_class_name("style-button.minimalist")

s = browser.find_element_by_css_selector("li.style-button.minimalist")

s = browser.find_element_by_css_selector(".style-button.minimalist")

如何选择此元素?

4 个答案:

答案 0 :(得分:0)

您可以在这里尝试XPath:

s = browser.find_element_by_xpath("//li[contains(@class, 'style-button')]")

希望这会有所帮助。

答案 1 :(得分:0)

已解决。在browser.refresh()之后添加了s.submit()

答案 2 :(得分:0)

最好的选择是使用 absolute xpath 。该按钮的名称为:

/html[1]/body[1]/div[1]/div[1]/div[3]/div[1]/div[1]/div[1]/div[2]/ul[1]/li[3]

此外,我发现有时页面未加载,硒搜索元素,这会导致错误。您可以等待元素出现。您可以找到更多信息here

结合这些,您的代码将为:

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


browser = webdriver.Firefox()
browser.get('https://www.flickr.com/')
s = browser.find_element_by_id('search-field')
s.send_keys('volleyball')
s.submit()

s = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, "/html[1]/body[1]/div[1]/div[1]/div[3]/div[1]/div[1]/div[1]/div[2]/ul[1]/li[3]")))
s.click()

答案 3 :(得分:0)

您的代码运行完美

尝试为您使用的操作系统下载geckodriver的最新版本,然后设置executable_path

它应该这样

browser = webdriver.Firefox(executable_path="./geckodriver")

,然后再次尝试运行改进的代码