能够定位元素但无法点击它

时间:2015-10-29 23:47:54

标签: python selenium

我正在尝试点击下载csv文件的按钮。我能找到它,但我无法点击它。

url = "http://www.basketball-reference.com/players/a/acyqu01/gamelog/2015/"
driver = webdriver.Firefox()
driver.get(url)
elem = driver.find_element_by_xpath(".//*[@id='advanced_div']/div[2]/div/span[6]")
elem.click()

ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with

我也试过这个:

action_chain = webdriver.ActionChains(self.driver)
action_chain.click(elem)
action_chain.perform()

我注意到源代码有一个透明的字体。这是否意味着隐藏了?我读了一些关于执行java脚本来点击它的内容。但是,我不知道该怎么做。

3 个答案:

答案 0 :(得分:1)

问题是隐藏了server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /usr/share/nginx/html; index index.html; server_name localhost; location / { try_files $uri $uri/ /index.html =404; } location /api/ { index /api/index.php; try_files $uri /api/index.php/$uri; } location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_pass localhost:9000; include fastcgi_params; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } 的{​​{1}}。您可以在下面看到该标记的HTML,请注意DIV样式。

id=advanced_div

在查看页面时,我注意到有一个"切换到高级游戏日志"链接在页面上,我点击它。当我这样做时,display:none变得可见,这意味着您想要的CSV链接现在可见。

因此,要使用代码执行此操作,您需要单击相同的链接,然后单击所需的CSV链接。您可以使用代码中的XPath ......或者......您可以使用<div id="advanced_div" style="display: none;"> ,我认为这样可以简化此任务。下面的代码应该有效。

DIV

我唯一担心的是,CSV链接文字可能不是唯一的。如果是这种情况,您可以使用下面的XPath。

find_element_by_link_text()

通常,在编写自动化时要执行的操作是弄清楚用户需要在页面上执行的操作,然后编写执行相同操作的代码。因此,当您遇到一些隐藏的元素时,就像在这种情况下一样,弄清楚用户如何使其可见,然后使用代码执行此操作。

答案 1 :(得分:0)

尝试实现等待,而dom load-below是我的完整工作代码。它会自动设置firefox配置文件以避免csv文件保存提示并将csv保存到已定义的文件夹中,在这种情况下该文件夹是Desktop\downloads

import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0
from selenium.webdriver.common.by import By


profile = webdriver.FirefoxProfile()
profile.set_preference("browser.download.folderList", 2)
profile.set_preference("browser.download.manager.showWhenStarting", False)
profile.set_preference("browser.download.dir", r"C:\Users\USER_NAME\Desktop\downloads")
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/csv")


url = "http://www.basketball-reference.com/players/a/acyqu01/gamelog/2015/"

driver = webdriver.Firefox(firefox_profile=profile)
driver.get(url)
WebDriverWait(driver,1000).until(EC.presence_of_all_elements_located((By.XPATH,"//*[@id='basic_div']")))
elem = driver.find_element_by_xpath("//*[@id='basic_div']/div[2]/div/span[6]")
elem.click()
time.sleep(2)
driver.quit()

答案 2 :(得分:0)

这样做

elem = driver.find_element_by_xpath(".//*[@id='basic_div']/div[2]/div/span[6]")
driver.execute_script('arguments[0].click();',elem)