die Bilder sind in einem Javascript als "placeholder" verpackt.
ich bin immer wie folgt vorgegangen:
Code: Alles auswählen
driver = webdriver.Firefox(options=Options,executable_path=pfad+ r'\tools\geckodriver.exe')
driver.get(url.format(index))
iterations = 0
while iterations < 3:
html = driver.execute_script("return document.documentElement.outerHTML")
time.sleep(2)
driver.execute_script("window.scrollTo(0, window.scrollY + 800)")
iterations += 1
...
sel_soup = BeautifulSoup(html, 'html.parser')
jetzt möchte ich das ganze mit QWebEnginePage machen.
Ich hab festgestelt das er schneller ist als webdriver
wie kriege ich das Javascript am laufen ?
da hab ich folgendes gefunden:
Code: Alles auswählen
class Page(QWebEnginePage):
def __init__(self, url):
self.app = QApplication(sys.argv)
QWebEnginePage.__init__(self)
self.html = ''
self.loadFinished.connect(self._on_load_finished)
self.load(QUrl(url))
self.app.exec_()
def _on_load_finished(self):
self.html = self.toHtml(self.Callable)
print('Load finished')
def Callable(self, html_str):
self.html = html_str
self.app.quit()
page = Page(url).runJavascript("return document.documentElement.outerHTML")
soup = BeautifulSoup(page.html,'lxml')
page = Page(url).runJavascript("return document.documentElement.outerHTML")
AttributeError: 'Page' object has no attribute 'runJavascript'
wo kommt das runJavascript() rein im script ?
kann ich irgendwie herrausfinden das die Bilder geladen sind ?
ich hab das ja bisher mit 3x jeweils :
Code: Alles auswählen
time.sleep(2)
driver.execute_script("window.scrollTo(0, window.scrollY + 800)")
Also der ladet die Side, schläft für 2 sekunden(damit er zeit hat die Bilder zu laden)
scrollt dann 800pixel runter und wartet wieder 2 sekunden usw.
gibt es eine möglichkeit abzufragen ob die Bilder geladen sind oder geht das wieder nur mit sleep(2) usw. ?