【问题标题】:Selenium won't click a button with python?Selenium 不会单击带有 python 的按钮?
【发布时间】:2015-09-27 18:28:22
【问题描述】:

请有人帮我解决这个问题,

我无法让 selenium 单击 python 按钮。我在 python 3.4 并使用 Firefox 42

浏览器打开,仅此而已

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://www.speedyshare.com/")
elem = find_element_by_id_name("selectfilebox")
elem.click()

浏览器打开,但出现以下错误

Traceback (most recent call last):
  File "/home/ro/sele.py", line 6, in <module>
    elem = find_element_by_id_name("selectfilebox")
NameError: name 'find_element_by_id_name' is not defined

【问题讨论】:

  • 这不是硒问题,而是您的 Python 导入问题。你需要告诉 Python 如何找到find_element_by_id_name 函数。
  • 好的,谢谢,如果我听起来像个菜鸟,我很抱歉,但你的意思是 elem = driver.find_element_by_name 吗?
  • 类似的东西。我不知道那个函数在哪个模块,我会留给你找出来。
  • 你可以看看documentation section 4.1(for locating an element by id)。
  • python中有'find_element_by_id_name()'函数,它可能是'find_element_by_id()'或'find_element_by_name()'。您应该根据需要使用其中任何一种。

标签: python selenium


【解决方案1】:

检查driver.page_source 以查看 HTML 驱动程序看到的 HTML 会有所帮助。

driver.get("http://www.speedyshare.com/")
content = driver.page_source
with open('/tmp/out', 'wb', encoding='utf-8') as f:
    f.write(content)

你会在 /tmp/out 中看到:

<frameset rows="*"><frame src="http://www30.speedyshare.com/upload_page.php" name="index31" />
</frameset>

啊哈。您要单击的标签位于框架内。所以先切换到那个框架:

driver.switch_to.frame("index31")

然后你就可以通过 id 找到元素了:

elem = driver.find_element_by_id("selectfilebox")
elem.click()

这个问题与Selenium Unable to locate element (Python) WebScraping基本相同;如果不先知道解决方案,就很难知道这一点。

【讨论】:

  • 谢谢你,你真的深入了,而且很有见地,很抱歉我花了我的时间回复,但我想让它正常工作,而不是让任何人得到信息。我想出了这个,但它仍然无法正常工作。
  • 查看页面源代码的想法很棒。
猜你喜欢
  • 2019-02-27
  • 2020-04-14
  • 2022-01-19
  • 1970-01-01
  • 2015-10-18
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多