2014-10-15 18 views
15

Tôi đang cố gắng sử dụng khung Yêu cầu với python (http://docs.python-requests.org/en/latest/) nhưng trang tôi đang cố gắng sử dụng javascript để tìm nạp thông tin mà tôi muốn.Sử dụng python Yêu cầu với các trang javascript

Tôi đã cố gắng tìm kiếm trên web để tìm giải pháp nhưng thực tế là tôi đang tìm kiếm bằng từ khóa javascript hầu hết những thứ tôi đang nhận được là cách xóa bằng ngôn ngữ javascript.

Có cách nào để sử dụng khung yêu cầu với các trang sử dụng javascript không?

Trả lời

18

Bạn sẽ phải thực hiện cùng một yêu cầu (sử dụng thư viện Yêu cầu) mà javascript đang tạo. Bạn có thể sử dụng bất kỳ số lượng công cụ nào (bao gồm cả các công cụ được tích hợp vào Chrome và Firefox) để kiểm tra yêu cầu http đến từ javascript và chỉ cần tự thực hiện yêu cầu này từ Python.

+0

Vì vậy, không có cách nào để có yêu cầu sử dụng javascript. – Ben

+3

Không, Yêu cầu là một thư viện http. Nó không thể chạy javascript. – sberry

+4

Bạn đã nhìn vào đâu và bạn đã sử dụng công cụ nào để tìm Ben? Tôi đang cố gắng này ngay bây giờ và tôi đang bị mắc kẹt – codyc4321

6

Trong khi Selenium có vẻ hấp dẫn và hữu ích, nó có một vấn đề chính không thể khắc phục được: hiệu suất. Bằng cách tính toán mọi thứ một trình duyệt, bạn sẽ cần nhiều sức mạnh hơn. Ngay cả PhantomJS cũng không cạnh tranh với một yêu cầu đơn giản. Tôi khuyên bạn chỉ nên sử dụng Selenium khi bạn thực sự cần phải bấm nút. Nếu bạn chỉ cần javascript, tôi khuyên bạn nên PyQt (kiểm tra https://www.youtube.com/watch?v=FSH77vnOGqU để tìm hiểu nó).

Tuy nhiên, nếu bạn muốn sử dụng Selenium, tôi khuyên bạn nên sử dụng Chrome trên PhantomJS. Nhiều người dùng gặp vấn đề với PhantomJS khi một trang web không hoạt động trong Phantom. Chrome có thể không đầu (không phải đồ họa)!

Trước tiên, hãy đảm bảo bạn đã cài đặt ChromeDriver, mà Selenium phụ thuộc vào để sử dụng Google Chrome.

Sau đó, hãy chắc chắn bạn có Google Chrome phiên bản 60 hoặc cao hơn bằng cách kiểm tra nó trong chrome URL: // settings/giúp

Bây giờ, tất cả các bạn cần làm là đoạn mã sau:

from selenium.webdriver.chrome.options import Options 
from selenium import webdriver 

chrome_options = Options() 
chrome_options.add_argument("--headless") 

driver = webdriver.Chrome(chrome_options=chrome_options) 

Nếu bạn không biết làm thế nào để sử dụng Selenium, đây là một cái nhìn tổng quát:

driver.get("https://www.google.com") #Browser goes to google.com 

yếu tố tìm: sử dụng một trong hai phương pháp YẾU tỐ hoặc ELEMENT. Ví dụ:

driver.find_element_by_css_selector("div.logo-subtext") #Find your country in Google. (singular) 
  • driver.find_element (s) _by_css_selector (css_selector) # Mỗi phần tử phù hợp với CSS selector này
  • driver.find_element (s) _by_class_name (class_name) # Mỗi phần tử với lớp sau
  • driver.find_element (s) _by_id (id) # Mỗi phần tử với ID sau
  • driver.find_element (s) _by_link_text (LINK_TEXT) # Mỗi với liên kết văn bản đầy đủ
  • driv er.find_element (s) _by_partial_link_text (partial_link_text) # Mỗi văn bản liên kết một phần.
  • driver.find_element (s) _by_name (tên) # Mỗi phần tử nơi name = luận
  • driver.find_element (s) _by_tag_name (TAG_NAME) # Mỗi phần tử với đối số tên thẻ

Ok! Tôi đã tìm thấy một phần tử (hoặc danh sách các phần tử). Nhưng tôi phải làm gì bây giờ?

Dưới đây là những phương pháp bạn có thể làm trên một yếu tố elem:

  • elem.tag_name # có thể quay trở lại nút trong một.
  • elem.get_attribute ("id") # Trả về ID của phần tử.
  • elem.text # Văn bản bên trong của phần tử.
  • elem.clear() # Xóa đầu vào văn bản.
  • elem.is_displayed() # True cho các thành phần hiển thị, False cho các phần tử vô hình.
  • elem.is_enabled() # True cho đầu vào được bật, sai cách khác.
  • elem.is_selected() # Nút radio hoặc phần tử hộp kiểm này đã được chọn chưa?
  • elem.location # Từ điển đại diện cho vị trí X và Y của một phần tử trên màn hình.
  • elem.click() # Nhấp vào elem.
  • elem.send_keys ("thelegend27") # Loại thelegend27 vào elem (hữu dụng cho đầu vào văn bản)
  • elem.submit() # Gửi hình thức trong đó elem mất phần.

lệnh đặc biệt:

  • driver.back() # Nhấp vào nút Back.
  • driver.forward() # Nhấp vào nút Chuyển tiếp.
  • driver.refresh() # Làm mới trang.
  • driver.quit() # Đóng trình duyệt bao gồm tất cả các tab.
  • foo = driver.execute_script ("trở lại 'hello';") # Execute javascript (có thể mất giá trị trả lại!)
Các vấn đề liên quan