click()适用于Chrome但不适用于Firefox?

时间:2015-04-04 10:22:39

标签: python google-chrome firefox selenium selenium-webdriver

我想打开一个站点并单击一个按钮,所以我写了下面的代码:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get('http://python.org')
elem = driver.find_element_by_id("downloads")
elem.click()

代码用给定的URL打开Firefox。它按照它的ID名称找到按钮,然后点击它。

现在的问题是,它在Firefox中无法正常运行。当我点击上述网站上的下载按钮时,我的Firefox中将会打开一个新链接。但是当代码被执行时,它会点击按钮,而不是按照我的方式点击按钮,就像它选择""选择"按钮而不是点击它。

奇怪的是,上面的代码与Chrome完美无缺:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://python.org')
elem = driver.find_element_by_id("downloads")
elem.click()

点击下载按钮,然后在Chrome中打开一个新链接。

我想知道,问题是什么?为什么代码适用于Chrome而不适用于Firefox?

顺便说一下,我运行Windows 7 64位和Python 2.7 32位。我的浏览器版本为Firefox 36,Chrome为41。

3 个答案:

答案 0 :(得分:1)

我看到有一个子节点,您尝试单击的元素的锚标记。您需要单击锚标记才能导航到该链接。下面的代码为我工作

driver.find_element_by_css_selector("#downloads a").click()

答案 1 :(得分:0)

这似乎对我有用。请尝试:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get('http://python.org')
elem = driver.find_element_by_link_text("Downloads")
elem.click()

对于chrome:

from selenium import webdriver

driver = webdriver.Chrome("res/chromedriver.exe")
driver.get('http://python.org')
elem = driver.find_element_by_link_text("Downloads")
elem.click()

答案 2 :(得分:0)

等待Downloads链接变为可点击移至元素并点击:

wait = WebDriverWait(driver, 10)
downloads = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Downloads")))

ActionChains(driver).move_to_element(downloads).click().perform()

适用于Chrome和Firefox。