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

Python-在. aspx网站上自动输入表单并将输出存储在文件中(使用Selenium?)

沈实
2023-03-14

我这个月才开始学习编码,从Python开始。我想自动化一个简单的任务(我的第一个项目)——访问一家公司的职业网站,检索当天发布的所有工作,并将其存储在一个文件中。这就是我想按顺序做的:

  1. 去http://www.nov.com/careers/jobsearch.aspx
  2. 选择选项-每页25个作业
  3. 选择日期选项-今天
  4. 点击搜索职位
  5. 将结果存储在文件中(只是职位名称)

我环顾四周,发现硒是最好的处理方法。aspx页面。

我已经使用硒完成了步骤1-4。然而,有两个问题:

  1. 我不希望浏览器打开。我只需要将输出保存到一个文件中
  2. 即使我可以打开浏览器,在空闲状态下(我有windows操作系统)使用Python代码(作为Web驱动程序从Selenium导出)也会导致错误。当我运行Python代码时,浏览器打开,链接被加载。但是没有任何表单选择发生,在浏览器关闭之前,我收到了foll错误消息(下面的链接)。那么错误消息是什么意思呢?http://i.stack.imgur.com/lmcDz.png

如有任何帮助/指导,将不胜感激。。。谢谢

共有2个答案

赵嘉赐
2023-03-14

关于第一个问题,您可以简单地使用无头浏览器。这在Chrome和Firefox上都是可能的。检查Grey Li的答案,例如:Python-Firefox Headless

from selenium import webdriver
options = webdriver.FirefoxOptions()
options.add_argument('headless')
driver = webdriver.Firefox(options=options)
宰父存
2023-03-14

首先,关于你得到的错误,我应该说,根据表达式NoSuchElementExc0019和消息Unable to loction元素,你为web驱动程序提供的选择器是错误的,web驱动程序找不到元素。

既然你没有发布你的代码,我也不能打开你输入的网站链接,我可以给你一个示例代码,我会尽可能多地统计细节。

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("url")
number_option = driver.find_element_by_id("id_for_25_option_indicator")
number_option.click()
date_option = driver.find_element_by_id("id_for_today_option_indicator")
date_option.click()
search_button = driver.find_element_by_id("id_for_search_button")
search_button.click()
all_results = driver.find_elements_by_xpath("some_xpath_that_is_common_between_all_job_results")

result_file = open("result_file.txt", "w")

for result in all_results:
    result_file.write(result.text + "\n")

driver.close()
result_file.close()

既然你说你最近才开始学习编码,我想我必须给出一些解释:

  1. 我建议您在元素具有ID属性的所有情况下使用driver.find_element_by_id。它更健壮。
  2. 代替result.text,您可以使用result.get_attribute(value)result.get_attribute(innerHTML)

这一切现在都进入了我的脑海;但是如果你发布你的代码,我们看看有什么问题,那就更好了。此外,如果你给我一个网站的新链接,那就太好了,这样我就可以在代码中添加更多的细节;你当前的链接坏了。

 类似资料:
  • Python提供一个标准的模块,称为pickle。使用它你可以在一个文件中储存任何Python对象,之后你又可以把它完整无缺地取出来。这被称为 持久地 储存对象。 还有另一个模块称为cPickle,它的功能和pickle模块完全相同,只不过它是用C语言编写的,因此要快得多(比pickle快1000倍)。你可以使用它们中的任一个,而我们在这里将使用cPickle模块。记住,我们把这两个模块都简称为p

  • 这里有个问题。我有这个Python脚本,它检查大型数据集的电子邮件并提取它们。在我的mac上,它只显示终端中的所有电子邮件地址。有时文件是1-2演出,所以它可能需要一点,输出是疯狂的。我想知道在Python中,把它保存到一个文件中而不是在终端中打印出来有多容易。 我甚至不需要看到所有的东西都被扔进候机楼。 这是我正在使用的脚本

  • 我正在编写一个函数,该函数正在读取已处理的文件(文件名)。在已处理文件(open_file1)中,所有行都是元组。我的问题在于:为了使用该程序,我必须始终以命令输入作为输入文件名。如果用户在没有输入输入文件名的情况下输入团队标识符,即第三条elif语句,则程序崩溃。所以,我所做的是,在第三个elif语句中,我用一个os语句检查了输入文件的存在性。如果输入文件不存在,我写了一个else语句来请求另一

  • 问题内容: 我正在尝试建立一个非常简单的Web服务器,用户可以在其中访问站点并编写一个字符串和一个整数。然后我想保存这两个输入,我的想法是将其保存到一个文本文件中,该文件也可以显示在浏览器:… / textfile / 我不知道关于SO的规范是多少代码可以发布,但是到目前为止,这是我所拥有的: 还有我的HTML表单:(没有所有格式) 所以我最初的想法是实现两个函数returnInput()和sav

  • 我正在寻找合适的资源/教程,可以帮助我开发和部署事件网格触发器,该触发器将等待图像上传到blob容器,使用python处理该图像,然后将结果保存在另一个blob容器中。我发现了许多单独的文档,它们不一定在逻辑上指导我使用Azure Portal和VSCode进行开发和部署,就像从头到尾的一步一步的演练,介绍了实现这一点的所有步骤。 任何指导将不胜感激。

  • 文件 std::fs::File 本身实现了 Read 和 Write trait,所以文件的输入输出非常简单,只要得到一个 File 类型实例就可以调用读写接口进行文件输入与输出操作了。而要得到 File 就得让操作系统打开(open)或新建(create)一个文件。还是拿例子来说明 use std::io; use std::io::prelude::*; use std::fs::File;