1

Ich versuche zu lernen, Webskrapping (Ich bin ein absoluter Neuling). Ich habe festgestellt, dass auf einigen Websites (z. B. Quora), wenn ich auf eine Schaltfläche klicke und ein neues Element auf dem Bildschirm erscheint. Ich kann nicht scheinen, die Seitenquelle des neuen Elements zu erhalten. Ich möchte in der Lage sein, die Seitenquelle des neuen Popups zu erhalten und alle Elemente zu erhalten. Beachten Sie, dass Sie ein Quora-Konto haben müssen, um mein Problem zu verstehen.

Ich habe einen Teil eines Codes, die Sie beautifulsoup, Selen und chromedriver mit verwenden können:Python Webscraping Selen und BeautifulSoup (Modal Fenster Inhalt)

from selenium import webdriver 
from bs4 import BeautifulSoup 
from unidecode import unidecode 
import time 

sleep = 10 
USER_NAME = 'Insert Account name' #Insert Account name here 
PASS_WORD = 'Insert Account Password' #Insert Account Password here 
url = 'Insert url' 
url2 = ['insert url'] 
#Logging in to your account 
driver = webdriver.Chrome('INSERT PATH TO CHROME DRIVER') 
driver.get(url) 
page_source=driver.page_source 
if 'Continue With Email' in page_source: 
    try: 
     username = driver.find_element(By.XPATH, '//input[@placeholder="Email"]') 
     password = driver.find_element(By.XPATH, '//input[@placeholder="Password"]') 
     login= driver.find_element(By.XPATH, '//input[@value="Login"]') 
     username.send_keys(USER_NAME) 
     password.send_keys(PASS_WORD) 
     time.sleep(sleep) 
     login.click() 
     time.sleep(sleep) 
    except: 
     print ('Did not work :(.. Try again') 
else: 
    print ('Did not work :(.. Try different page') 


Nächster Teil sammeln, um die betreffenden Webseite und („versuchen“) gehen Informationen über die Anhänger einer bestimmten Frage.

for url1 in url2:   
    driver.get(url1) 
    source = driver.page_source 
    soup1 = BeautifulSoup(source,"lxml") 
    Follower_button = soup1.find('a',{'class':'FollowerListModalLink QuestionFollowerListModalLink'}) 
    Follower_button2 = unidecode(Follower_button.text) 
    driver.find_element_by_link_text(Follower_button2).click() 

####Does not gives me correct page source in the next line#### 
    source2=driver.page_source 
    soup2=BeautifulSoup(source2,"lxml") 

    follower_list = soup2.findAll('div',{'class':'FollowerListModal QuestionFollowerListModal Modal'}) 
    if len(follower_list)>0: 
     print 'It worked :)' 
    else: 
     print 'Did not work :(' 

Allerdings, wenn ich versuche, die Seite Quelle des Anhänger Element zu bekommen, habe ich am Ende der Seite Quelle der Haupt-Seite immer eher als das Folgeelement. Kann mir jemand helfen, die Seitenquelle des Follower-Elements zu bekommen, das auftaucht? Was bekomme ich nicht hier?

HINWEIS: Eine andere Möglichkeit, neu zu erstellen oder an meinem Problem suchen, ist die Anmeldung bei Ihrem Quoren-Konto (falls Sie eine haben) und dann mit Anhänger auf jede Frage zu gehen. Wenn Sie auf die Schaltfläche "Follower" unten rechts auf dem Bildschirm klicken, wird ein Popup angezeigt. Mein Problem besteht im Wesentlichen darin, die Elemente dieses Popups zu bekommen.


Update - Okay, so habe ich ein wenig zu lesen und es scheint, als ob das Fenster ein modales Fenster ist. Kann mir jemand helfen, den Inhalt eines modalen Fensters zu bekommen?

+0

Versuchen Sie, zum Fenstergriff zu wechseln. Könnte sein? Eigentlich ist das nicht möglich, da die Quelle schon da ist, nur das Element ist nicht sichtbar. – ProFan

+0

Ich habe das schon probiert. Es scheint nur einen Griff zu geben. Also kein Umschalten möglich. :( – Prometheus

Antwort

0

Problem gelöst. Alles, was ich tun musste, war eine Zeile hinzuzufügen:

nach der Generierung der Klick. Das Problem bestand darin, dass anfangs keine Wartezeit vorhanden war und die Seitenquelle nicht aktualisiert wurde. Mit time.sleep jedoch ausreichend lange (kann von Website zu Website variieren), wurde die Seitenquelle endlich aktualisiert und ich konnte die benötigten Elemente bekommen. :) Lektion gelernt. Geduld ist der Schlüssel zum Web Scraping. Hab den ganzen Tag damit verbracht, das herauszufinden.

Verwandte Themen