2016-06-11 26 views
1

我選擇了Selenium,因爲鏈接的hrefs是動態生成的,儘管通過bs4的某些方法會更受歡迎。這些JavaScript鏈接如何通過Selenium或BeautifulSoup遍歷?

我使用PhantomJS但試圖火狐以及

當試圖點擊一個鏈接,沒有任何反應。

例如,

url = 'http://www.achema.de/de/ausstellung/aussteller-und-produkte.html' 

driver.get(url) 

resultsBox = driver.find_element_by_css_selector('div[id="ix_result"]') 

for tr in resultsBox.find_elements_by_tag_name('tr'): 
    link = tr.find_element_by_tag_name('a') 
    link.click() 

    # I've also tried: 
    # ActionChains(driver).move_to_element(link).click(link).perform() 
+1

你確定你迭代的集合有元素'a'嗎?您應該提供測試輸入以獲得更好的答案。 – Hamlett

回答

1

我不太清楚,我知道你想點擊什麼,但我點擊頁面「集市亭C7」用下面的代碼的第一個商家。

如果你想點擊上面的導航鏈接,適當的目標將是這樣的:

from selenium import webdriver 

def so_test(): 

    driver = webdriver.Firefox() 

    def connect(): 
     driver.get('http://www.achema.de/de/ausstellung/aussteller-und-produkte.html') 
     div = driver.find_element_by_id('ix_letters') 
     test_link = div.find_elements_by_tag_name('li') 
     link = test_link[0].find_element_by_tag_name('a') 
     link.click() 

    connect() 

so_test() 

類似的東西。讓我知道我是否脫離基地。我很樂意嘗試和進一步幫助。

+1

謝謝你的迴應。我發現鏈接被點擊,但是要加載的頁面是完全動態的,所以在嘗試從鏈接中提取之前至少需要2秒鐘的睡眠。 – Phillip

+1

這有點讓人惱火,因爲來自硒導入webdriver '不是第二個代碼塊的一部分。而且我甚至無法提交編輯原因,這是此答案中唯一的錯誤。 :D – Rahul

+0

修正了它。謝謝你指出! – Jeremy

2

正如Orenthal所說,我發現鏈接被點擊。但是,要加載的頁面是完全動態的,因此在嘗試從該鏈接提取之前至少需要2秒的睡眠時間。

+1

我最近第一次進入硒時遇到了同樣的問題,我在測試中使用了time.sleep(5),但它沒有使用它,但可能是機器/瀏覽器/連接依賴。 – Jeremy