Pregunta Conseguir que el selenio funcione en pythonanywhere


Tengo entendido que pythonanywhere admite un navegador Firefox sin cabeza, pero que necesita

from pyvirtualdisplay import Display

Y para que puedas conectarte usando

with Display():
    while True:
        try:
            driver = webdriver.Firefox()
            break
        except:
            time.sleep(3)

Y me conecto muy bien. Sin embargo, después de comenzar a usar el controlador con

with Display():
    while True:
        try:
            driver = webdriver.Firefox()
            break
        except:
            time.sleep(3)
    wb=load_workbook(r'/home/hoozits728/mutual_fund_tracker/Mutual_Fund_Tracker.xlsx')
    ws=wb.get_sheet_by_name('Tactical')

    for i in range(3, ws.max_row+1):
        if ws.cell(row=i,column=2).value is not None:
            driver.get('https://finance.yahoo.com/quote/' + ws.cell(row=i,column=2).value + '/performance?ltr=1')
            oneyear=driver.find_element_by_css_selector('#Col1-0-Performance-Proxy > section > div:nth-child(2) > div > div:nth-child(5) > span:nth-child(2)').text
            threeyear=driver.find_element_by_css_selector('#Col1-0-Performance-Proxy > section > div:nth-of-type(2) > div > div:nth-of-type(6) > span:nth-of-type(2)').text
            fiveyear=driver.find_element_by_css_selector('#Col1-0-Performance-Proxy > section > div:nth-of-type(2) > div > div:nth-of-type(7) > span:nth-of-type(2)').text
            ws.cell(row=i,column=10).value=oneyear
            ws.cell(row=i,column=11).value=threeyear
            ws.cell(row=i,column=12).value=fiveyear

           … and so on …

Me sale este error después de un momento

enter image description here 

Por lo que vale, este código funciona perfectamente bien en mi máquina local. Además, soy un miembro que paga, por lo que no debería haber problemas con la lista blanca.


6
2017-09-16 11:22


origen


Respuestas:


Recientemente entendí que yahoo ha bloqueado Python en cualquier lugar para ejecutar cualquier script de raspado web. Supongo que esto es cierto para todos los servidores de AWS y para aquellos que los usan, pero no estoy 100% seguro de esto. Espero que esto ayude a cualquiera que se encuentre con esta pregunta.

https://www.pythonanywhere.com/forums/topic/5724/#id_post_52307


5
2017-09-18 17:07



Estás obteniendo ese error porque el selenio no puede conectarse al navegador que creaste. Si está ejecutando el primer fragmento de código, y luego el segundo fragmento de código, entonces la pantalla ha estado cerca y eso probablemente haría que el navegador se bloquee.

Necesita ejecutar el código que usa el navegador dentro el con bloque

Hay un ejemplo en las páginas de ayuda de PythonAnywhere que muestra cómo hacer todo esto de la manera más confiable.


0
2017-09-16 13:10



Preguntas populares