2016-01-13 15 views
10

Tôi đang thực hành selen trong python và tôi muốn tìm nạp tất cả các liên kết trên trang web bằng selenium.Tìm nạp tất cả liên kết href bằng selen trong python

Ví dụ, tôi muốn tất cả các liên kết trong 'a href" tag từ website này. http://psychoticelites.com/

Tôi đã viết một kịch bản và nó đang làm việc Nhưng, nó thay cho tôi địa chỉ đối tượng tôi.' đã cố gắng sử dụng các từ khóa 'id' để có được những giá trị, nhưng, nó không hoạt động

kịch bản hiện tại của tôi: -..

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 



driver = webdriver.Firefox() 
driver.get("http://psychoticelites.com/") 
assert "Psychotic" in driver.title 
continue_link = driver.find_element_by_tag_name('a') 
elem = driver.find_elements_by_xpath("//*[@href]") 
#x = str(continue_link) 
#print continue_link 
#print elem 
z = elem 
print z 

Bất kỳ loại đầu mối/gợi ý sẽ được đánh giá

+0

Bạn dùng đũa phép nào thay vì địa chỉ đối tượng? – Guy

+0

thực tế 'VALUE' tức là chính liên kết đó. – Xonshiz

Trả lời

16

Vâng, bạn phải chỉ đơn giản là lặp qua danh sách.

elems = driver.find_elements_by_xpath("//a[@href]") 
for elem in elems: 
    print elem.get_attribute("href") 

find_elements_by_* trả về danh sách các phần tử (Lưu ý chính tả 'yếu tố'). Lặp qua danh sách, lấy từng phần tử và tìm nạp giá trị thuộc tính bắt buộc mà bạn muốn từ nó. (trong trường hợp này là href)

+1

Chúa ơi, bạn là người bảo vệ cuộc sống. Cảm ơn bạn jason. – Xonshiz

+0

tại sao tất cả tài liệu nói rằng xpath là "không được đề xuất" nhưng hầu hết các câu trả lời trên xpath sử dụng stackoverflow? – Ywapom

1

Bạn có thể nhập dom HTML bằng thư viện dom html trong python. Bạn có thể tìm thấy nó ở đây và cài đặt nó sử dụng PIP:

https://pypi.python.org/pypi/htmldom/2.0

from htmldom import htmldom 
dom = htmldom.HtmlDom("https://www.github.com/") 
dom = dom.createDom() 

Đoạn mã trên tạo ra một HtmlDom object.The HtmlDom mất một tham số mặc định, url của trang. Khi đối tượng dom được tạo, bạn cần gọi phương thức "createDom" là HtmlDom. Điều này sẽ phân tích cú pháp dữ liệu html và xây dựng cây phân tích cú pháp mà sau đó có thể được sử dụng để tìm kiếm và thao tác dữ liệu html. Hạn chế duy nhất mà thư viện áp đặt là dữ liệu cho dù đó là html hay xml phải có phần tử gốc.

Bạn có thể truy vấn các yếu tố sử dụng "tìm" phương pháp của đối tượng HtmlDom:

p_links = dom.find("a") 
for link in p_links: 
    print ("URL: " +link.attr("href")) 

Đoạn mã trên sẽ in tất cả các liên kết/url hiện tại trên trang web

+0

Cố gắng giải thích mã và câu trả lời của bạn, không chỉ dán một đoạn mã. Chào mừng bạn đến với Stack Overflow! Bạn có thể muốn tham gia [tour]! – Docteur

0

Bạn có thể thử một cái gì đó như :

links = driver.find_elements_by_partial_link_text('') 
+0

Một chút giải thích có thể hữu ích. – GhostCat

Các vấn đề liên quan