2017-10-10 15 views
8

Tôi đang cố gắng tìm một phương pháp trong python cho phép bạn đọc dữ liệu trong trình duyệt web hiện đang sử dụng. Có hiệu quả, tôi đang cố gắng tải xuống một dataframe lớn dữ liệu trên trang web của công ty được kiểm soát cục bộ và triển khai nó vào một khung dữ liệu. Vấn đề là trang web có một quá trình xác thực mã thông báo khá phức tạp mà tôi đã không thể bỏ qua bằng cách sử dụng Selenium bằng cách sử dụng một loạt các webdrivers, Requests, urllib và cookielib bằng cách sử dụng một loạt các tham số người dùng. Tôi đã từ bỏ hoàn toàn mặt trận này vì tôi gần như tích cực rằng có nhiều quy trình xác thực hơn là có thể đạt được dễ dàng với các thư viện này.Python - Thao tác và đọc trình duyệt từ trình duyệt hiện tại

Tuy nhiên, tôi đã quản lý để bỏ qua quá trình mã thông báo bắt buộc khi tôi nhanh chóng thử nghiệm mở tab mới trong trình duyệt hiện tại đã đăng nhập bằng cách sử dụng WebBrowser. Về mặt cổ điển, WebBrowser không cung cấp chức năng đọc có nghĩa là mặc dù trang có thể được mở dữ liệu trên trang không thể được đọc vào một khung dữ liệu gấu trúc. Điều này khiến tôi nghĩ rằng tôi có thể sử dụng Win32com, mở trình duyệt, đăng nhập, sau đó chạy phần còn lại của tập lệnh, nhưng một lần nữa, không có khả năng đọc chung của công văn cho thám hiểm internet có nghĩa là tôi không thể gửi thông tin tôi muốn . Tôi bối rối. Bất kỳ ý tưởng?

Tôi có thể nhận được các mã thông báo xác thực cần thiết, nhưng tôi chắc chắn rằng sẽ mất một hoặc hai tuần trước khi bất kỳ điều gì xảy ra ở mặt trước đó. Tôi rõ ràng sẽ thích nhận được một cái gì đó trong thời gian có nghĩa là trong khi tôi chờ đợi cho các kịch bản auth thực tế từ công ty.

Cập nhật: Tôi nhận được mã thông báo xác thực từ công ty, tuy nhiên yêu cầu sử dụng gói python trên máy chủ khác tôi cũng không có quyền truy cập, chủ yếu là do sự kỳ quặc mà tôi đang sử dụng Python trong bộ phận của tôi. Do đó, các điều trên vẫn được áp dụng - cần một phương pháp để đọc và thao tác một trình duyệt đang mở.

+0

Selen có thể hoạt động với cửa sổ trình duyệt hiện có trên màn hình, bạn có thể thử lại. – georgexsh

+0

https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/18 – WolVes

+0

Nếu tôi hiểu quyền trên, chức năng mong muốn ở trên đã được quyết định không bao giờ được kết hợp. Có một số giải pháp cho vấn đề trong các nhận xét, nhưng tất cả đều là các ngôn ngữ lập trình khác. – WolVes

Trả lời

8

Từng bước

1) Khởi động trình duyệt bằng Selenium.

2) Script nên bắt đầu chờ đợi yếu tố chắc chắn rằng thông báo cho bạn rằng bạn đã trang cần thiết và đăng nhập.

3) Bạn có thể sử dụng cửa sổ trình duyệt mới này để đăng nhập vào trang bằng tay.

4) Tập lệnh phát hiện bạn đang ở trang yêu cầu và đã đăng nhập.

5) Quy trình tạo trang theo cách bạn muốn.

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

# start webdriver (opens Chrome in new window) 
chrome = webdriver.Chrome() 

# initialize waiter with maximum 300 seconds to wait. 
waiter = WebDriverWait(chrome , 300) 

# Will wait for appear of #logout element. 
# I assume it shows that you are logged in. 
wait.until(EC.presence_of_element_located(By.ID, "logout")) 

# Extract data etc. 

Có thể dễ dàng hơn nếu bạn sử dụng hồ sơ người dùng Chrome của mình. Bằng cách này, bạn có thể có phiên trước đó tiếp tục, do đó bạn sẽ không cần thực hiện bất kỳ hành động đăng nhập nào.

options = webdriver.ChromeOptions() 
options.add_argument("user-data-dir=FULL_PATH__TO_PROFILE") 
chrome = webdriver.Chrome(chrome_options=options) 
chrome.get("https://your_page_here") 
+0

Vui lòng sửa lỗi tiếng Anh của tôi nếu có thể. –

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