2017-10-05 1 views
-2

私はDebian上のPython 2.7でいくつかのWebサイトを廃棄していますが、コードが自動的に停止することがあります(フリーズすることができない場合やインターネット接続がない場合)。ウェブサイトを自動的に開くときに接続エラーを回避するにはどうすればよいですか?

解決方法はありますか?問題をスキップして、次のURLにコードを実行してください。ので、私はこのような問題を取得する場合、このスクリプトはちょうど自動的に停止...

ここに私のコード:

#!/usr/bin/python 
#!/bin/sh 
# -*- coding: utf-8 -*- 
from bs4 import BeautifulSoup 
from selenium import webdriver 
import urllib2 
import subprocess 
import unicodecsv as csv 
import os 
import sys 
import io 
import time 
import datetime 
import pandas as pd 
import MySQLdb 
import re 
import contextlib 
import selenium.webdriver.support.ui as ui 
import numpy as np 
from datetime import datetime, timedelta 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By 
import pyautogui 
from pykeyboard import PyKeyboard 

reload(sys) 
sys.setdefaultencoding('utf-8') 


cols = ['MYCOLS..'] 

browser = webdriver.Firefox() 
datatable=[] 

browser.get('LINK1') 
time.sleep(5) 

browser.find_element_by_xpath('//button[contains(text(), "CLICK EVENT")]').click() 
time.sleep(5) 
browser.find_element_by_xpath('//button[contains(text(), "CLICK EVENT")]').click() 
html = browser.page_source 
soup=BeautifulSoup(html,"html.parser") 
table = soup.find('table', { "class" : "table table-condensed table-hover data-table m-n-t-15" })  

for record in table.find_all('tr', class_="hidden-xs hidden-sm ng-scope"): 
    for data in record.find_all("td"): 
     temp_data.append(data.text.encode('utf-8')) 
    newlist = filter(None, temp_data) 
    datatable.append(newlist) 

time.sleep(10) 
browser.close() 

#HERE I INSERT MY DATAES INTO MYSQL..IT IS NOT IMPORTANT, AND MY SECOND LINK STARTING HERE 

browser = webdriver.Firefox() 
datatable=[] 

browser.get('LINK2') 
browser.find_element_by_xpath('//button[contains(text(), "LCLICK EVENT")]').click() 
time.sleep(5) 
html = browser.page_source 
soup=BeautifulSoup(html,"html.parser") 
table = soup.find('table', { "class" : "table table-condensed table-hover data-table m-n-t-15" }) 

for record in table.find_all('tr', class_="hidden-xs hidden-sm ng-scope"): 
    for data in record.find_all("td"): 
     temp_data.append(data.text.encode('utf-8')) 
    newlist = filter(None, temp_data) 
    datatable.append(newlist) 

time.sleep(10) 
browser.close() 

#MYSQLDB PART AGAIN...AND THE NEXT LINK IS COMING. 

1 EDIT:

スクリプトは、このクリックイベントがあまりにも停止見つけることができません。どうして?どうすればこれを避けることができますか?

+0

二つのこと、1スタックオーバーフローに –

+0

ようこそ取り扱いあなたのコードモデラー1.使用例外を作ります!参照:[Xを行うには?](https://meta.stackoverflow.com/questions/253069/whats-the-appropriate-new-current-close-reason-for-how-do-i-do-x )SOに関する期待は、質問をするユーザーが自分の質問に答えるだけでなく、その研究、コードの試行、結果を共有することです。これは、時間をかけて自分自身を助けようとしていることを示しています。明白な回答を繰り返さないようにしてくれています。そして、より具体的で適切な答えを得ることができます。他にも:[ask] – JeffC

答えて

0

Seleniumを使用すると、特定の要素や条件を待つようにドライバ(ブラウザオブジェクト)を構成できます。次に、通常のtry/exceptを使用してエラーを処理することができます。たとえば、TimeoutExceptionなどです。

セレンは、よく待っているシステムをtheir documentationで説明しました。ここで

はセレンに例外処理用のコードスニペットです:

from selenium.webdriver.support.ui import WebDriverWait 
from selenium.common.exceptions import TimeoutException 
from selenium.common.exceptions import NoSuchElementException 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support import expected_conditions as EC 

try: 
    # Wait for any element/condition, you can even had lambda if you wish to 
    WebDriverWait(browser, 10).until(
     EC.visibility_of_all_elements_located((By.ID, 'my-item')) 
    ) 
except TimeoutException: 
    # Here I raise an error but you can do whatever you want like exiting properly or logging something 
    raise RuntimeError('No Internet connection') 
+0

例えば、私はボタンを待つことができますか?これは、例Webページです:https://www.flightradar24.com/data/airports/grz/departuresと私のコード:browser.find_element_by_xpath( 'button(contains text()、 "以前のフライトを読み込む)") ).click()、私はどのように私のコードにそれを構築することができますどこに置く必要がありますか? – Harley

+0

私はあなたのためにすべてをやりません、私はあなたにヒントを与えた。今すぐSeleniumを使用すると、簡単に構築できます。そのドキュメントを参照してください。 – rak007

+0

私はちょうど正しい例で尋ねました。どうもありがとうございます。 – Harley

関連する問題