Người dùng thêm nội dung khác vào trang (từ các ngày trước đó) bằng cách nhấp vào phần tử <div onclick="control.moreData()" id="moreLink">More...</div>
ở cuối trang.
Vì vậy, để có được nội dung mong muốn, bạn có thể sử dụng Selenium để nhấp vào thành phần id="moreLink"
hoặc thực hiện một số JavaScript để gọi control.moreData();
trong một vòng lặp. Ví dụ, nếu bạn muốn nhận được tất cả nội dung như xa trở lại như thứ Sáu, ngày 15 tháng 2 năm 2013 (có vẻ như một chuỗi định dạng này tồn tại cho mỗi ngày, đối với nội dung được tải) python của bạn có thể trông giống như sau:
content = browser.page_source
desired_content_is_loaded = false;
while (desired_content_is_loaded == false):
if not "Friday, February 15, 2013" in content:
sel.run_script("control.moreData();")
content = browser.page_source
else:
desired_content_is_loaded = true;
EDIT:
Nếu bạn vô hiệu hóa JavaScript trong trình duyệt của bạn và tải lại trang, bạn sẽ thấy rằng không có "xu hướng" nội dung gì cả. Điều đó cho tôi biết, là các mục đó được nạp tự động. Có nghĩa là, chúng không phải là một phần của tài liệu HTML được tải xuống khi bạn mở trang. Selenium's .get() đợi cho tài liệu HTML tải, nhưng không phải cho tất cả JS để hoàn thành. Không có thông báo nếu async JS sẽ hoàn thành trước hoặc sau bất kỳ sự kiện nào khác. Nó hoàn thành khi nó đã sẵn sàng, và có thể khác nhau mỗi lần. Điều đó sẽ giải thích lý do tại sao đôi khi bạn có thể nhận được tất cả, một số hoặc không có nội dung nào khi bạn gọi browser.page_source
vì nó phụ thuộc vào việc async JS hoạt động như thế nào tại thời điểm đó.
Vì vậy, sau khi mở trang, bạn có thể thử chờ một vài giây trước khi nhận nguồn - cung cấp cho JS tải thời gian nội dung hoàn thành.
browser.get(googleURL)
time.sleep(3)
content = browser.page_source
Nguồn
2013-05-17 23:13:58
Bất kỳ lý do cụ thể nào khi sử dụng trình chuyển đổi web qua selen cho mục đích này? – Torxed
@Torxed - Tôi nghi ngờ đó là do xử lý nội dung động/javascript ... – root
vâng tôi đã thử urllib2 nhưng nó không hoạt động do nội dung động/javascript – user2392965