Tự động hóa các yêu cầu web bằng cách sử dụng curl?


13

Tôi có một số hệ thống "cố định" mà tôi phải sử dụng tại nơi làm việc. Một số trong số chúng là khủng khiếp, với khung hình, cửa sổ bật lên và như vậy.

Tôi đã suy nghĩ về việc tự động hóa một số thứ bằng cách sử dụng curl hoặc một cái gì đó tương tự. Tôi cần đăng nhập, nhấp vào liên kết, thiết lập một số dữ liệu và họ thực hiện một số bài đăng.

Có thể sử dụng curl? Hay tôi sẽ trở nên tốt hơn khi sử dụng thứ gì đó như Selenium?


1
Tôi sẽ sử dụng zope.testbrowser của Python cho điều đó.
phunehehe

2
Bạn có cần sử dụng Javascript không?
trực giác


2
Sử dụng một phiên chỉ là gửi id phiên với mỗi yêu cầu. Hoặc trong một cookie hoặc trong tham số GET. wgetcurlcó thể sử dụng tệp cookie Netscape, vì vậy nếu trình duyệt của bạn cũng sử dụng tệp đó, có thể đủ để chỉ định tệp đó cho trình tải xuống. Vì vậy, loại trình duyệt bạn đang sử dụng?
manatwork

2
Không có may mắn cho một giải pháp đơn giản với những người. Firefox và Chrome sử dụng SQLite, Opera có định dạng tệp dữ liệu nhị phân. Có vẻ như bạn sẽ phải tìm kiếm id phiên và chuyển thủ công cho trình tải xuống.
manatwork

Câu trả lời:


13

Vâng, nó hoàn toàn có thể với curl. Quan trọng nhất sẽ là lưu và tải lại cookie giữa các lần sử dụng curl với --cookie-jar. Bạn cũng có thể đăng dữ liệu biểu mẫu khi cần thiết. Tôi thường sử dụng một tiện ích bổ sung Firefox có tên Live HTTP Headers để nắm bắt những gì xảy ra khi tôi điều hướng một trang web. Nó sẽ ghi lại bất kỳ tiêu đề, nhưng cũng có bất kỳ bài viết mẫu nào rất hữu ích khi cố gắng tìm ra những gì cần làm với curl. Tôi đã viết các tập lệnh bash tự động hóa các yêu cầu curl khác nhau và sử dụng các đường ống và các tệp tạm thời (lịch sự mktemp) để thực hiện một số xử lý hạn chế trên trang web, nhưng nếu phải xử lý nhiều trang web, tôi thường chuyển sang Perl với LibWWW.


Ngoài các tiêu đề HTTP Live Live, cả Safari và Chrome đều có thể hiển thị các tiêu đề được chia nhỏ theo đối tượng trong Trình kiểm tra web.
bahamat

15

Đối với các trường hợp đơn giản là tải xuống nội dung của một trang, hãy sử dụng curl hoặc wget . Cả hai đều là các công cụ dòng lệnh được thiết kế để tải xuống các tệp qua HTTP và có nhiều tùy chọn. Trong trường hợp của bạn, bạn có thể sẽ cần làm cho các công cụ này trông giống như một trình duyệt; câu trả lời của lutzkycâu trả lời của chim cánh cụt đề cập đến một số tùy chọn cuộn tròn và wget hữu ích trong khía cạnh đó.

Đôi khi, khi bạn cần đăng nhập , việc đăng nhập thủ công trong trình duyệt web sẽ dễ dàng hơn rất nhiều, sau đó xuất cookie của trình duyệt web (các tiện ích mở rộng như allcookies hoặc Export Cookies cho Firefox có thể trợ giúp).

Nếu bạn cần phân tích nội dung của một số trang hoặc biểu mẫu bài đăng , bạn có thể cần các công cụ fancier hơn là curl và wget. Một số công cụ tốt có Perl với LWP(libwww)HTML::TreeBuilder(HTML-Tree) hoặc Python với các thư viện chuẩn (đặc biệt httplibhtmllib ).

Đối với các tương tác phức tạp hơn với một trang web, tham chiếu là WWW :: Cơ chế hóa của Perl . Thư viện Perl này xác định các chức năng cấp cao để tương tác với một trang web giống như trình duyệt web, bao gồm POST, biểu mẫu, cookie, nhưng không phải Javascript. Nếu Perl không phải là tách trà của bạn, thì thư viện này có mô phỏng với các khả năng tương tự trong các ngôn ngữ khác, chẳng hạn như cơ giới hóa PythonCơ chế hóa Ruby .

Cuối cùng, khi bạn cần Javascript , cách tiếp cận thông thường là sử dụng trình duyệt web được điều khiển bởi khung tự động hóa trình duyệt. SeleniumWatir là những lựa chọn phổ biến; xem thêm Có công cụ nào tốt ngoài SeleniumRC có thể tìm nạp các trang web bao gồm nội dung được vẽ bởi JavaScript không?


6

Yêu thích của tôi là wget, vì vậy tôi sẽ đưa ra một ví dụ với điều đó. Những gì bạn muốn làm là sao chép phiên trình duyệt của bạn càng chặt chẽ càng tốt, vì vậy hãy sử dụng các đối số dòng lệnh có liên quan. Những cái cần thiết phụ thuộc vào cách trang web kiểm tra kỹ lưỡng trình duyệt của bạn. --referer(sic) thường là đủ, nhưng bạn cũng có thể cần --user-agent--load-cookies.

Kỹ thuật này về cơ bản là giả mạo trình duyệt - bạn đang cố gắng wgettrình bày bản thân với trang web dưới dạng trình duyệt. Vấn đề lớn nhất bạn sẽ gặp phải là CAPTCHA, không có trong trang web mẫu mà bạn đã đưa ra. Ngoài ra, hãy đảm bảo bạn tuân thủ các chính sách thời gian của trang web (45 giây trong trường hợp này), hoặc có thể bạn sẽ bị chặn.

Có lẽ không thể tải xuống cùng một tệp trong các phiên khác nhau - trang web cấp các đặc quyền tải xuống trên tệp cụ thể cho một phiên cụ thể.


Câu trả lời tốt với những cân nhắc toàn diện. Cảm ơn
xiaohan2012
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.