2016-08-20 13 views
1
https://www.facebook.com/friends/requests/?fcref=jwl&outgoing=1 

Ich möchte „Weitere Anfrage“ in der zu klicken Sie auf „Freundschaftsanfrage gesendet“Python 3 + Selen: Wie finde ich dieses Element von Xpath?

<div id="outgoing_reqs_pager_57b87e5793eb04682598549" class="clearfix mtm uiMorePager stat_elem _646 _52jv"> 
    <div> 
     <a class="pam uiBoxLightblue _5cz uiMorePagerPrimary" role="button" href="#" ajaxify="/friends/requests/outgoing/more/?page=2&page_size=10&pager_id=outgoing_reqs_pager_57b87e5793eb04682598549" rel="async">See More Requests</a> 
<span class="uiMorePagerLoader pam uiBoxLightblue _5cz"> 
    </div> 
</div> 

ich diesen Code verwendet, aber es funktioniert nicht.

driver.find_element_by_xpath("//*[contains(@id, 'outgoing_reqs_pager')]").click() 

habe ich den Fehler:

Message: Element is not clickable at point (371.5, 23.166671752929688). Other element would receive the click:

<input aria-owns="js_8" class="_1frb" name="q" value="" autocomplete="off" placeholder="Search Facebook" role="combobox" aria-label="Search" aria-autocomplete="list" aria-expanded="false" aria-controls="js_5" aria-haspopup="true" type="text"> 

Wie es klicken? Danke :)

+0

Hier sind Sie Element erfolgreich zu finden, indem 'xpath' mit .. dieses Problem mit Klick ist. Wenn Selen zum Klicken auf dieses Element geht, kann hier ein anderes Element überlagert sein. So stellen Sie sicher, dass xPath nur Ihr Wunschelement findet. –

+0

Können Sie mir sagen, welches Element Sie hier finden möchten? 'div' oder' a' oder 'span' ?? –

+0

@SaurabhGaur Hallo, ich habe die Frage für das Detail aktualisiert – NGuyen

Antwort

1

Eigentlich hier sind Sie Ortung Element mit partiellen ID-Übereinstimmung, so kann diese Xpath nicht eindeutig sein und mehrere Elemente zurückgeben.

find_element gibt immer das erste Element durch passende Locator zurück, kann es sein, das andere Element zurückgibt, das von anderem Element überlagert wird, anstatt Wunschelement, deshalb sind Sie in Schwierigkeiten.

Hier sollten Sie versuchen, link_text mit Wunsch Element zu finden, indem ihr Text unter Verwendung: -

driver.find_element_by_link_text("See More Requests").click() 

Oder partial_link_text wie unten verwenden: -

driver.find_element_by_partial_link_text("See More Requests").click() 

Edited1: - Wenn Sie Wenn Sie immer noch die gleiche Ausnahme machen, müssen Sie zuerst scrollen, um das Element zu erreichen, indem Sie exexute_script() verwenden, dann klicken Sie wie folgt: -

link = driver.find_element_by_partial_link_text("See More Requests") 

#now scroll to reach this link 
driver.exexute_script("arguments[0].scrollIntoView()", link) 

#now click on this link 
link.click() 

Oder, wenn Sie nicht blättern möchten, können Sie hier exexute_script verwenden, ohne wie unten zu scrollen: -

link = driver.find_element_by_partial_link_text("See More Requests") 

#now perform click using javascript 
driver.exexute_script("arguments[0].click()", link) 

Edited2: - Wenn Sie auf diesen Link innerhalb klicken möchten while-Schleife, bis es erscheint, müssen Sie WebDriverWait warten implementieren, bis sie wie unten beim nächsten Mal präsentieren: -

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

wait = WebDriverWait(driver, 10) 

# now find link 
link = wait.until(EC.presence_of_element_located((By.LINK_TEXT, "See More Requests"))) 

#now perform click one of these above using java_script 
+0

Hallo, es funktioniert nur, wenn ich Firefox scrollen, um zu sehen, was passiert. Wenn ich nichts tue, klicke es auf falsche Position: D, also nimm denselben Fehler – NGuyen

+0

Ok, dann musst du zuerst mit 'exexute_script' blättern, um dieses Element zu erreichen, dann click..try mit aktualisierter Antwort ausführen und mich wissen lassen –

+0

Oder Klick direkt ausführen benutze 'exexute_script' ohne scrolling..try beide Optionen mit aktualisierter Antwort und lass es mich wissen –

Verwandte Themen