当前位置: 首页 > 知识库问答 >
问题:

Selenium WebDriver:Firefox没有通过标记名称获取元素

罗甫
2023-03-14

我想运行Firefox无头使用Selenium WebDriver在Python。

关键是转到一个页面,等待JavaScript加载,并收集该页面上的所有链接。

为了开始测试,我编写了以下代码:

import time 
from selenium import webdriver
from selenium.webdriver.firefox.options import Options


options = Options()
options.add_argument("--headless")

url = "http://localhost:3000/"

driver = webdriver.Firefox(firefox_options=options)
driver.get(url) 
time.sleep(5)

urls = driver.find_elements_by_tag_name('a') 
print(urls)

driver.quit()

这总是给出以下错误:

Traceback (most recent call last):
  File "sel.py", line 18, in <module>
    urls = driver.find_elements_by_tag_name('a') 
  File "/home/.local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 545, in find_elements_by_tag_name
    return self.find_elements(by=By.TAG_NAME, value=name)
  File "/home/.local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 995, in find_elements
    'value': value})['value'] or []
  File "/home/.local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 318, in execute
    response = self.command_executor.execute(driver_command, params)
  File "/home/petra/.local/lib/python2.7/site-packages/selenium/webdriver/remote/remote_connection.py", line 472, in execute
    return self._request(command_info[0], url, body=data)
  File "/home/petra/.local/lib/python2.7/site-packages/selenium/webdriver/remote/remote_connection.py", line 496, in _request
    resp = self._conn.getresponse()
  File "/usr/lib/python2.7/httplib.py", line 1136, in getresponse
    response.begin()
  File "/usr/lib/python2.7/httplib.py", line 453, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python2.7/httplib.py", line 417, in _read_status
    raise BadStatusLine(line)
httplib.BadStatusLine: ''

我试着删除这行time.sleep(5),因为我认为这可能是个问题。

现在print(urls)返回以下内容:

[<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="27257d43-81ec-48e4-9ed2-55709a23d60f", element="e728d5ef-001f-4335-bd57-19a1f2d82683")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="27257d43-81ec-48e4-9ed2-55709a23d60f", element="2c59c828-8557-48cc-a79a-02ea3c9d2d65")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="27257d43-81ec-48e4-9ed2-55709a23d60f", element="e2058a00-9bad-4f0c-8e2d-a236a567dddd")>]

如果我输入时间,就会出现这个输出。睡眠(0)直到时间。睡眠(4)

不管怎样,这都不是我想要的结果;我想看看我页面上的所有锚。

我做错了什么?

对不起,我是新手。

共有1个答案

顾亦
2023-03-14

请尝试以下代码:

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


urls = ui.WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.TAG_NAME, "a")))

for url in urls:

    print(url.get_attribute("href"))

# Another example of printing URLs (where actual_urls is a list of anchors).
actual_urls = [url.get_attribute("href") for url in urls]
print(actual_urls)

希望有帮助!

 类似资料:
  • 我用Java编写了一个程序,我有以下问题: 在课程的后期,我再次需要这些学生。我可以这样做: 但是我没有学生的人数。有没有办法让他们的名字,这是在类学生?

  • 问题内容: 这应该很简单,但我只是没有看到。 如果我有一个进程ID,该如何使用它来获取有关该进程的信息,例如进程名称。 问题答案: 在Linux下,您可以读取proc文件系统。文件包含命令行。

  • 问题内容: 我正在使用PHPDOM,并且试图在DOM节点中获取具有给定类名的元素。获得该子元素的最佳方法是什么? 更新: 我最终使用了PHP,它更容易使用。 问题答案: 更新:CSS选择器的Xpath版本 因此,在下面我回应hakre的评论之后,我感到好奇,并调查了后面的代码。看起来上面的选择器已编译为以下xpath(未经测试): 所以PHP将是: 基本上,我们在这里所做的就是规范化属性,以便即使

  • 问题内容: 我想知道是否有一种功能或某种与之等效的方法。 问题答案: 您的函数名称中缺少。返回元素的集合,这些元素需要迭代: IE8及以下版本不支持,因此您必须找到一个polyfill或使用(IE8)。

  • 问题内容: 使用JavaScript,我们可以使用以下语法通过id获取元素: 我尝试以下按类获取元素: 但这导致了错误: 如何按类获取元素? 问题答案: DOM函数的名称实际上不是,仅仅是因为页面上的多个元素可以具有同一类,因此:。 此方法的返回值将是NodeList实例,或者是(FF的超集,例如返回的实例)。无论如何:返回值是一个类似于数组的对象: 如果由于某种原因需要返回对象作为数组,则由于其

  • 问题内容: 有没有简单的方法来获取标签名称? 例如,如果给我一个函数,我想得到。 问题答案: 您可以致电。例子: 如果写出来很麻烦,则可以创建一个自定义函数,如下所示: 例子: 请注意,按照惯例,标签名称返回 CAPITALIZED 。如果希望返回的标签名称全部为小写字母,则可以编辑自定义函数,如下所示: 例子: