如果任务由系统运行,则无法完成(因此它是隐藏的)

如果任务由系统运行,则无法完成(因此它是隐藏的)

我正在使用 Python 制作一个应用程序来解析网页。作为参考,这是该程序的代码:

import csv 
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import logging
logging.basicConfig(filename='example.log',level=logging.DEBUG)
logging.info('first log')

listsof = []
driver = webdriver.Firefox()
logging.info('Setup driver')
driver.implicitly_wait(30)
logging.info('next step')
driver.get("https://www.lacrossealerts.com/login")
logging.info('Got webpage')
username = driver.find_element_by_name('username')
password = driver.find_element_by_name('password')
login = driver.find_element_by_name('login')
logging.info('Got elements')
username.send_keys("username")
password.send_keys("password")
password.send_keys(Keys.RETURN)
logging.info('Hit enter')
test = driver.find_elements_by_class_name('row-val')
contents = driver.page_source
test1 = driver.find_elements_by_class_name('row-val')
test2 = driver.find_element_by_class_name('timestamp')
logging.info('Found elements')
listsof.append(test2.text)
for e in test1:
    print(e.text)
    listsof.append(e.text)
print(listsof)
logging.info('Step before write to CSV')
with open('C:/Users/MyUser/Downloads/weather.csv', 'a', newline='') as csvfile:
    writer = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
    writer.writerow(listsof)
driver.close()
logging.info('Wrote to CSV')

在此,我进行了一些记录。我得到了以下信息:

INFO:root:first log
DEBUG:selenium.webdriver.remote.remote_connection:POST http://127.0.0.1:65058/hub/session {"sessionId": null, "desiredCapabilities": {"platform": "ANY", "javascriptEnabled": true, "version": "", "browserName": "firefox"}}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
INFO:root:Setup driver
DEBUG:selenium.webdriver.remote.remote_connection:POST http://127.0.0.1:65058/hub/session/5cdbbf60-3a9f-4eca-96d2-7a026c47b56d/timeouts/implicit_wait {"sessionId": "5cdbbf60-3a9f-4eca-96d2-7a026c47b56d", "ms": 30000.0}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
INFO:root:next step
DEBUG:selenium.webdriver.remote.remote_connection:POST http://127.0.0.1:65058/hub/session/5cdbbf60-3a9f-4eca-96d2-7a026c47b56d/url {"url": "https://www.lacrossealerts.com/login", "sessionId": "5cdbbf60-3a9f-4eca-96d2-7a026c47b56d"}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
INFO:root:Got webpage
DEBUG:selenium.webdriver.remote.remote_connection:POST http://127.0.0.1:65058/hub/session/5cdbbf60-3a9f-4eca-96d2-7a026c47b56d/element {"using": "name", "sessionId": "5cdbbf60-3a9f-4eca-96d2-7a026c47b56d", "value": "username"}

因此看起来它没有超越以下其中一行:

username = driver.find_element_by_name('username')
password = driver.find_element_by_name('password')
login = driver.find_element_by_name('login')

这可能是网络或互联网问题,导致它没有适当的权限?还有其他原因吗?当我在批处理文件中运行此命令时:

cd C:\Users\User\Downloads
python weather.py

它运行完美。我在我的用户帐户上将其作为计划任务运行。当设置为时Run only when this user is logged on,它运行完美。但是,当我尝试在系统用户帐户或上运行它时Run whether this user is logged on or not,它无法完成任务。我希望任务(cmd 并启动 Firefox)不显示给用户,以免打扰他们的工作,因为它每 20 分钟运行一次,但这不起作用。我这样做有问题吗?有没有更好的方法可以“隐藏”它而不让用户看到?

答案1

我知道这是一篇旧帖子;但是,对于其他正在为此苦苦挣扎的人来说,最好的方法是使用 PhantomJS 作为浏览器。由于它是无头的,它会悄悄地运行浏览器步骤和进程。此外,如果在未登录的情况下通过 Windows 计划任务作为 Python 脚本的一部分运行,也不会出现任何问题。您需要做的就是:在您的 Python 代码中将“driver = webdriver.Firefox()”替换为“driver = webdriver.PhantomJS()”,从此处下载 exe:http://phantomjs.org/并将其放在您的路径系统环境变量中,您可能已经在其中列出了您的 Python 依赖项路径。

相关内容