crontab -e
을 사용하여 실행중인 헤드리스 브라우저를 사용하는 스크립트가 있습니다. 그것은 처음 몇 번은 잘 실행하고 다음 역 추적과 충돌 :몇 번의 실행 후 헤드리스 스크립트가 충돌 함
Traceback (most recent call last):
File "/home/clint-selenium-firefox.py", line 83, in <module>
driver.get(url)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 248, in get
self.execute(Command.GET, {'url': url})
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 236, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 192, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Failed to decode response from marionette
내 crontab을 선은 다음과 같습니다
*/10 * * * * export DISPLAY=:0 && python /home/clint-selenium-firefox.py >> /home/error.log 2>&1
내가했습니다, 그래서 파이썬 스크립트로이 과부하 싶지 않아 내가 생각하기에 관련있는 비트를 뽑았다.
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 600))
display.start()
...
driver = webdriver.Firefox()
driver.get(url)
...
driver.quit()
...
display.stop()
귀하의 도움에 감사드립니다.
편집
버전 : 파이어 폭스 49.0.2; 셀레늄 : 3.0.1; geckodriver : geckodriver-v0.11.1-linux64.tar.gz
오류 (driver.get(url)
에 실패) 주위 코드 :이 더 --marionette 포트 옵션을 geckodriver에 전달되지 않기 때문에
driver = webdriver.Firefox()
if DEBUG: print "Opened Firefox"
for u in urls:
list_of_rows = []
list_of_old_rows = []
# get the old version of the site data
mycsvfile = u[1]
try:
with open(mycsvfile, 'r') as csvfile:
old_data = csv.reader(csvfile, delimiter=' ', quotechar='|')
for o in old_data:
list_of_old_rows.append(o)
except: pass
# get the new data
url = u[0]
if DEBUG: print url
driver.get(url)
if DEBUG: print driver.title
time.sleep(1)
page_source = driver.page_source
soup = bs4.BeautifulSoup(page_source,'html.parser')
보십시오. 마리오네트를 사용해야합니까? – HenryM
사용중인 firefox, selenium 및 geckodriver 버전은 무엇입니까? –
각각의 경우 최신 버전을 다운로드 중입니다 – HenryM