1

Я делаю приложение, используя 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 ответ1

2

Я знаю, что это старая публикация; но для всех, кто борется с этим, лучший подход - использовать PhantomJS в качестве браузера. Поскольку он безголовый, он спокойно выполняет шаги и процессы браузера. Кроме того, у него нет проблем, если он запускается как часть скрипта Python с помощью запланированной задачи Windows, но не вошел в систему. Все, что вам нужно сделать, это: поменять местами драйвер = webdriver.Firefox()'с' driver = webdriver.PhantomJS()'в вашем коде Python, скачайте exe здесь: http://phantomjs.org/ и поместите его в системную переменную вашего пути, где вы, вероятно, уже указали свой путь зависимостей Python.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .