Próbuję użyć następującego kodu, który działa poprawnie, ale nie pozwala na uruchomienie kodu JavaScript, co oznacza, że nie pobierz żądany kod HTML ze strony internetowej.Zeskanuj kod HTML ze strony internetowej po renderowaniu kodu JSON/Javascript bez selonu przy jednoczesnym wspieraniu testu POSTing
miałem spojrzeć na DryScrape
ale o ile widzę go nie obsługuje wysyłania jak można zobaczyć w funkcji auto_login()
, to samo dotyczy PyQt4
.
Strona ma 4 bity "list" JSON? które tworzą stronę po wczytaniu/renderowaniu; jeśli widzę źródło, to nie jest ładnie wyświetlane i nie mogę łatwo znaleźć w nim żadnych rzeczy, jednak gdybym "Sprawdził element" na stronie, HTML wyglądałby idealnie, a następnie mogę łatwo przejrzeć go za pomocą BeautifulSoup
.
Wiem, że mógłbym użyć Selenium
, ale to nie jest to, co chcę zrobić, głównie dlatego, że chce go uruchomić w tle, może będę mógł używać PhantomJS
lub PyVirtualDisplay
to zrobić, ale to będzie tylko jako ostatnia deska ratunku.
import requests
from bs4 import BeautifulSoup
HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'en-US,en;q=0.8', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'}
SESSION = requests.session()
RESPONSE = requests.Response
email = "[email protected]"
pass = "password123
def auto_login():
global RESPONSE
url = "https://website.com/log.php"
payload = {
"log":email,
"pwd":pass,
"finish":"https://website.com/listed/public/gen1/",
}
RESPONSE = SESSION.post(url, data=payload, headers=HEADERS, verify=False)
def process_html():
PROCESSED_HTML = BeautifulSoup(RESPONSE.content, 'html.parser')
return PROCESSED_HTML
def main():
auto_login()
PROCESSED_HTML = get_html()
if __name__ == "__main__":
main()
Jak można łatwo uczynić stronę internetową za pomocą mojego skryptu JavaScript (zmodyfikowany), najlepiej z PyQt4
(DryScrape
nie będzie prawidłowo zainstalować na moim systemie Windows 10, Python 2.7 z jakiegoś powodu) bez użycia Selenium
.
Wszelkie pomysły będą mile widziane.
Czy próbujesz już Selenium? – Buaban
Buaban, nie, to jest opcja ostatniego wyboru, której jeszcze nie wiem, jak to zrobić, muszę spojrzeć dalej w tle trasy "Selenium" i wymyślić, że zadziała. Poszukuję głównie opcji "PyQt4" i zmusić mój kod do zmiany minimalnej ilości zmian. – Ryflex
Testy selenowe bezgłowe są naprawdę trywialne ... to tylko kilka linijek kodu do zintegrowania z Xvfb: https://github.com/cgoldberg/xvfbwrapper#testing-example-headless-selenium-webdriver-tests –