2016-05-12 3 views
0

Als eine regelmäßige Aufgabe innerhalb meiner Job-Rolle muss ich oft vollständige Facebook-Konten von einem Benutzerkonto herunterladen. Ich versuche, meinen Workflow zu verbessern und dies zu automatisieren, wenn ich kann.Facebook Konto Download Automatisierung mit Python?

Ich habe versucht, auf der Website nach diesem Thema zu suchen, und obwohl viele den Login-Teil abdecken, muss ich noch eine Frage finden, die sich mit den Popup-Fenstern von Facebook beschäftigt. Wenn ich falsch liege, entschuldige ich mich und bitte korrigieren Sie den Beitrag entsprechend.

Als Ausgangspunkt habe ich beschlossen, Python zu lernen und benutze dies, um den Prozess mit ein wenig Hilfe von Selen und Chrome Driver zu skripten. Ich habe es geschafft, den Code für die Anmeldung zu schreiben und zur richtigen Seite zu navigieren und auf den ersten Link "Kopie herunterladen" zu klicken. Ich habe jedoch Schwierigkeiten, das Skript zu finden und klicken Sie auf die Schaltfläche "Start My Archive" im Popup-Fenster.

Hier ist der Code, dass ich die mehrere alternative Codeblöcke einschließlich bisher verwendet haben, die ich am Boden kommentiert haben versucht, aus:

import time 

from selenium import webdriver 

from selenium.webdriver.common.keys import Keys 

#Global Variables 
target = "john.doe.7" 
username = "[email protected]" 
password = "Password" 
sleep = 5 

#Finds and locates the ChromeDriver 
driver = webdriver.Chrome("C:\Python35-32\ChromeDriver\chromedriver.exe") 

#Set Chrome Options 
chrome_options = webdriver.ChromeOptions() 
prefs = {"profile.default_content_setting_values.notifications": 2} 
chrome_options.add_experimental_option("prefs",prefs) 
driver = webdriver.Chrome(chrome_options=chrome_options) 

#Directs browser to webpage 
driver.get('http://www.facebook.com'); 

#code block to log in user 
def logmein(): 
    search_box = driver.find_element_by_name('email') 
    search_box.send_keys(username) 
    search_box = driver.find_element_by_name('pass') 
    search_box.send_keys(password) 
    search_box.submit() 

#code to go to specific URL 
def GoToURL(URL): 
    time.sleep(sleep) # Let the user actually see something! 
    driver.get(URL);  

logmein() 

GoToURL('https://www.facebook.com/'+'settings') 

link = driver.find_element_by_link_text('Download a copy') 
link.click() 

#driver.find_element_by.xpath("//button[contains(., 'Start My Archive')]").click() 

#driver.find_element_by_css_selector('button._42ft._42fu.selected._42gz._42gy').click() 

#driver.find_element_by_xpath("//*[contains(text(), 'Start My Archive')]").click() 

#driver.find_element_by_css_selector('button._42ft._42fu.layerConfirm.uiOverlayButton.selected._42g-._42gy').click() 

#from selenium.webdriver.common.action_chains.ActionChains import driver 

#buttons = driver.find_elements_by_xpath("//title[contains(text(),'Start My Archive')]") 
#actions = ActionChains(self.driver) 
#time.sleep(2) 
#actions.click(button) 
#actions.perform() 
+0

Wenn Start Mein Archiv ist kein Webelement und es ist, was Windows auftaucht, können Sie nicht mit Treiber umgehen. Es gibt eine Klasse namens Robot, mit der Windows-basierte Alerts behandelt werden können. Beziehen Sie dieses http://www.softwaretestinghelp.com/handle-alerts-popups-selenium-webdriver-selenium-tutorial-16/ –

+0

@KishanPatel danke für Ihren Link und Tutorial. Ich werde das durcharbeiten und sehen, ob es hilft. Du hast über Webelement's erwähnt und ich denke, der Button ist einer. Ich habe den HTML-Code von der Seite unten eingefügt, die helfen kann zu klären, ob es sich um einen solchen Elementtyp handelt oder nicht. Es sieht auch so aus, als gäbe es eine Anforderung, JavaScript zu verwenden, um dies zur Arbeit zu bringen, aber nicht sicher? – JamesLC

Antwort

0

Fügen Sie einfach diese zu Ihrem Code und ausführen, wenn es funktioniert oder nicht. Verwenden Sie immer CssSelector.

Schau, ich lief den folgenden Code in Eclipse mit Java und ich bin mir nicht bewusst, Python also, wenn etwas in der Syntax falsch ist, entschuldige ich mich. Probieren Sie es einfach und sehen Sie.

driver.implicitly_wait(10) 
Startmyarchive = driver.find_element_by_css_selector("._42ft._42fu.selected._42gz._42gy") 
Startmyarchive.click() 

driver.implicitly_wait(10) 
Acknowledge = driver.find_element_by_css_selector("._42ft._42fu.layerConfirm.uiOverlayButton.selected._42g-._42gy") 
Acknowledge.click() 

driver.implicitly_wait(10) 
ClickOkay = driver.find_element_by_css_selector("._42ft._42fu.layerCancel.uiOverlayButton.selected._42g-._42gy") 
ClickOkay.click() 

Happy Learning :-) Antworten Sie für jede Frage zurück.

+0

Vielen Dank für diesen Code. Ich habe es ausprobiert und es funktioniert so, dass es wirklich hilfreich ist. Ich merkte, dass ich den Code nicht wie gesagt eingegeben habe, also danke, dass du dir die Zeit genommen hast, weiter darüber nachzudenken. – JamesLC

+0

Ja, James. Genießen. Mit mehr Fragen kommen. Es ist schön, immer zu lernen. :-) –

+0

Hallo Kishan, ich habe deinen Kommentar über die Verwendung von CssSelector immer mitgenommen und versuche mein Skript auf die nächste Stufe zu bringen. Mit Hilfe deines Hinweises kann ich nun zum Popup-Fenster "Passwort eingeben" gelangen, aber ich muss noch feststellen, ob es sich um das gleiche Popup-Popup wie vorher handelt, weil es bisher nicht funktioniert! :-) – JamesLC

Verwandte Themen