2016-07-14 23 views
0

Ich konfrontiert ein Problem der Schaltfläche Klick Problem mit Selen-Webdriver. Ich versuche, den "Like-Button" zu klicken, aber es hat nicht funktioniert.Selenium webdriver konnte nicht klicken klicken

Hier ist meine Selen-Quellcode:

driver = webdriver.Chrome(executable_path=cwd+'chromedriver', chrome_options=chrome_options) 
driver.get('https://tw.carousell.com/') 
time.sleep(5) 
#carousell_login() my login part 
time.sleep(5) 
for_her = driver.find_element_by_xpath('//*[@id="root"]/div/div[1]/div/div/section[3]/div[2]/div[2]/a') 
for_her.click() 
time.sleep(5) 
like_button = driver.find_element_by_xpath('//*[@id="root"]/div/div[1]/div/div[2]/div[2]/div/div/div[1]/figure/div/button') 
print like_button.get_attribute('outerHTML') 
webdriver.ActionChains(driver).move_to_element(like_button).click(like_button).perform() 

enter image description here

Dies ist die Ausgabe:

<button class="btn btn-default pdt-card-like"><i class="fa fa-heart"></i></button> 

Es scheint, dass ich dieses Element gefunden. Ich hatte keine Ahnung, warum der Klick nicht funktioniert hat.

Gibt es einen Hinweis für dieses Problem?

Danke!

============================================== ======================== Durch die Verwendung von Anderssons Lösung kann die Klick-Aktion funktionieren! Danke für die Tipps!

driver.execute_script('document.querySelectorAll("button.btn.btn-default.pdt-card-like")[0].style.display="block";') 
driver.execute_script('document.querySelectorAll("button.btn.btn-default.pdt-card-like")[0].style.visibility="visible";') 
driver.find_elements_by_xpath('//button[@class="btn btn-default pdt-card-like"]')[0].click() 
+1

Dies ist nicht Ihre Ausgabe. –

+0

müssen Sie uns auch Ihren HTML-Code zeigen –

+1

Woher wissen Sie, dass es nicht funktioniert hat? Erhalten Sie eine Fehlermeldung? –

Antwort

1

"Like-Button" ist zunächst nicht sichtbar, so kann man nicht einfach klicken auf it- Sie, wenn sichtbar zuerst machen sollte, so versuchen Sie folgenden Code ein:

number = 0 
driver.execute_script('document.querySelectorAll("button.btn.btn-default.pdt-card-like")[number].style.display="block";') 
driver.execute_script('document.querySelectorAll("button.btn.btn-default.pdt-card-like")[number].style.visibility="visible";') 
driver.find_elements_by_xpath('//button[@class="btn btn-default pdt-card-like"]')[number].click() 

Dies sollte Ihnen ermöglichen, „wie " Erster Gegenstand. Setzen Sie einen anderen number Wert, um das Zielobjekt zu ändern

+0

das hackt tatsächlich den HTML-Code; Es muss eine Möglichkeit geben, diese Schaltfläche sichtbar zu machen, wie das Klicken auf eine erste Schaltfläche oder etwas. Hacking dieses HTML-Codes kann ihm geben, was er jetzt will, aber es kann Dinge auf der Strecke brechen. –

+1

Dies ist kein großer Hack :) Es hängt von OP-Zielen ab. Dieser Code macht den Button immer sichtbar, aber nicht nur, wenn man ihn schweben lässt. Dasselbe kann mit 'ActionChains' gemacht werden, aber wie ich mich erinnere, funktioniert dieses Modul nicht immer wie erwartet mit' chromedriver' – Andersson

+0

vielen Dank für die Klarheit. upvoted –

0

Ich glaube, Sie müssen den Mauszeiger auf die Miniaturansicht bewegen, bevor die Schaltfläche "Gefällt mir" angezeigt wird. Versuchen Sie, move_to_element zu trennen und klicken Sie auf 2 separate Methoden und geben Sie einen Schlaf dazwischen. Sorry, ich weiß Python nicht, aber es sollte so aussehen.

Falls es immer noch nicht funktioniert, möchten Sie vielleicht das Element ändern, das als Miniaturelement verwendet werden soll. Für die Ex:

image = driver.find_element_by_xpath('//div[@class="pdt-card-img"]') 
webdriver.ActionChains(driver).move_to_element(image).perform() 
sleep(1000) 
webdriver.ActionChains(driver).click(like_button).perform() 

Beachten Sie, dass das Bildelement oben möglicherweise nicht korrekt sein, weil es mehrere von ihnen auf der HTML-Seite ist. Stellen Sie sicher, dass Sie die richtige auswählen.

Verwandte Themen