2017-12-18 3 views
2

Ich untersuche Subj, da es eine Website gibt, auf die ein Teil der Daten zugegriffen werden kann, nachdem Sie auf einen solchen Link geklickt haben.Klicken Sie auf JS-Link mit Splash

Ich habe ein Skript wie folgt:

#!/usr/bin/env python 

script=""" 
splash:go(splash.args.url) 
splash:wait(10) 

splash:runjs("$('a[data-bet-type=FixedPlace]')[0].click()") 
splash:wait(10) 

return { 
    -- html = splash:html(), 
    png = splash:png(), 
    -- har = splash:har(), 
} 
""" 

from requests import post 
from json import dumps, dump 
from base64 import b64decode 
from contextlib import suppress 

if 1: 
    endpoint='http://localhost:8050/run' 
    j={ 
     'lua_source': script, 
     'url': 'https://www.odds.com.au/horse-racing/bunbury/race-1', 
     'timeout': 90, 
     'headers': { 
      'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0' 
     } 
    } 

r=post(endpoint, headers={'Content-Type': 'application/json'}, data=dumps(j)) 
print(r.status_code) 
if r.status_code != 200: 
    print(r.text) 
    exit() 
j=r.json() 

for _ in ('html', 'har'):   
    with suppress(KeyError), open('1.'+_, 'w') as f: f.write(j[_]) 
with suppress(KeyError), open('1.png', 'wb') as f: f.write(b64decode(j['png'])) 

if 'har' in j: 
    for entry in j['har']['log']['entries']: 
     url=entry['request']['url'] 
     if url.startswith('https://www.odds.com.au'): print(url) 

Aber obwohl es perfekt ist die Seite dargestellt wird, der Klick nicht geschieht. Ich habe mit ya.ru versucht und der gleiche Ansatz funktioniert (aber es war ein Knopf in diesem Fall). Ich habe keine Ideen mehr. Versuchte Einstellung UA, Wiedergabe mit Wartezeiten (es ist nicht schnell, diese Seite), mit js_source, aber kann nicht auf ein Ding klicken, obwohl ich sehe, dass das Element gefunden wird.

+1

Welche Version von Splash verwenden Sie? In Splash 2.1 gibt es 'splash: mouse_click' ([Beispiel] (http://splash.readthedocs.io/en/latest/scripting-ref.html#splash-mouse-click)). Auch lohnenswert zu lesen ([Trigger jquery click] (https://stackoverflow.com/questions/1694595/can-i-call-jquery-click-to-follow-an-a-link-if-i-havent- bound-an-event-hand)) – Adelin

+0

@Adelin Ich habe Splash 3.0 von Master, und mouse_click funktioniert. – Pooh

Antwort

1

Das a Element, das Sie mit Ihrem CSS-Selektor lokalisieren ist nicht anklickbar - sehen, wie seine href Wert nichts zu verbinden ist gesetzt:

<a href="javascript:void(-1);" data-event-id="665605" data-bet-type="FixedPlace">place</a> 

Sie müssen stattdessen die übergeordnete li Element klicken:

Arbeitete für mich - bekam die "Place" Wettart ausgewählt.