Selenium Python'a yeni geldim. Sayfa başına 10 olacak profil URL'lerini almaya çalışıyorum. while
kullanmadan, tüm 10 URL'yi ancak tek başına yalnızca ilk sayfa için getirebiliyorum. while
kullandığımda, yineler, ancak sayfa başına yalnızca 3 veya 4 URL alır.Yineleme sırasında gerekli tüm bağlantılar alınamıyor - Selenium Python
Tüm 10 bağlantıyı getirip sayfalar arasında yinelemeye devam etmem gerekiyor. Sanırım, StaleElementReferenceException
ile ilgili bir şey yapmalıyım. Aşağıdaki kod verildiği zaman,
.
def test_connect_fetch_profiles(self):
driver = self.driver
search_data = driver.find_element_by_id("main-search-box")
search_data.clear()
search_data.send_keys("Selenium Python")
search_submit = driver.find_element_by_name("search")
search_submit.click()
noprofile = driver.find_elements_by_xpath("//*[text() = 'Sorry, no results containing all your search terms were found.']")
self.assertFalse(noprofile)
while True:
wait = WebDriverWait(driver, 150)
try:
profile_links = wait.until(EC.presence_of_all_elements_located((By.XPATH,"//*[contains(@href,'www.linkedin.com/profile/view?id=')][text()='LinkedIn Member'or contains(@href,'Type=NAME_SEARCH')][contains(@class,'main-headline')]")))
for each_link in profile_links:
page_links = each_link.get_attribute('href')
print(page_links)
driver.implicitly_wait(15)
appendFile = open("C:\\Users\\jayaramb\\Documents\\profile-links.csv", 'a')
appendFile.write(page_links + "\n")
appendFile.close()
driver.implicitly_wait(15)
next = wait.until(EC.visibility_of(driver.find_element_by_partial_link_text("Next")))
if next.is_displayed():
next.click()
else:
print("End of Page")
break
except ValueError:
print("It seems no values to fetch")
except NoSuchElementException:
print("No Elements to Fetch")
except StaleElementReferenceException:
print("No Change in Element Location")
else:
break
orada gerekli profil URL'yi getirmek için başka etkili yolu vardır ve sayfalar arasında yineleme tutmak varsa bana bildirin.
Vay !! Bu işe yaradı ... Büyük teşekkürler :) :) 'İleri' düğmesine tıklamanız gerektiğinde bana 'StaleElementReferenceException' doğru kullanımı konusunda yardımcı olabilir misiniz? –
StaleElementReferenceException, başvuruda bulunduğunuz öğenin artık orada olmadığını belirten selenyumdur. Bu, bazı JavaScript sayfanın içeriğini dinamik olarak güncellediğinde veya öğeyi içeren sayfadan ayrıldığında ortaya çıkabilir. Bu nedenle, eski eleman artık kullanılamaz ve güncellenmesi gerekir. Bu [makale] (http://engineeringquality.blogspot.nl/2013/08/ways-of-dealing-with.html), bununla başa çıkmanın bazı yollarını listelemektedir. – sowa
Teşekkürler tonnne :) :) Yardımın için teşekkürler :) :) –