- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 Selenium 2(2.33 版 Python 绑定(bind),Firefox 驱动程序)编写一个通用的网络抓取工具。它应该采用任意 URL、加载页面并报告所有出站链接。由于 URL 是任意的,我无法对页面内容做出任何假设,因此通常的建议(等待特定元素出现)不适用。
我有代码应该轮询 document.readyState
直到它达到“完成”或 30 秒超时已经过去,然后继续:
def readystate_complete(d):
# AFAICT Selenium offers no better way to wait for the document to be loaded,
# if one is in ignorance of its contents.
return d.execute_script("return document.readyState") == "complete"
def load_page(driver, url):
thử:
driver.get(url)
WebDriverWait(driver, 30).until(readystate_complete)
except WebDriverException:
vượt qua
links = []
thử:
for elt in driver.find_elements_by_xpath("//a[@href]"):
try: links.append(elt.get_attribute("href"))
except WebDriverException: pass
except WebDriverException: pass
return links
这种方法有效,但在大约五分之一的页面上,.until
调用永远挂起。发生这种情况时,通常浏览器实际上还没有完成页面加载(“throbber”仍在旋转),但几十分钟过去了,超时不会触发。但有时页面似乎已完全加载,但脚本仍未继续。
什么给了?如何使超时可靠地工作?有没有更好的方法来请求等待页面加载(如果不能对内容做出任何假设)?
Để ý:WebDriverException
的强制性捕获和忽略已被证明是必要的,以确保它从页面中提取尽可能多的链接,无论页面中的 JavaScript 是否正在做一些有趣的事情DOM(例如,我曾经在提取 HREF 属性的循环中遇到“陈旧元素”错误)。
Để ý:这个问题在本网站和其他地方有很多变体,但它们都有细微但关键的差异,这使得答案(如果有的话)无用我,或者我已经尝试了这些建议,但它们不起作用。 请准确回答我提出的问题。
câu trả lời hay nhất
我遇到了类似的情况,因为我使用 Selenium 为一个相当知名的网站服务编写了屏幕截图系统,并且遇到了同样的困境:我对正在加载的页面一无所知。
在与一些 Selenium 开发人员交谈后,答案是各种 WebDriver 实现(例如 Firefox Driver 与 IEDriver)对页面何时被认为已加载或不被 WebDriver 返回控制做出不同的选择。
如果你深入研究 Selenium 代码,你可以找到尝试做出最佳选择的地方,但是由于有很多事情可能导致正在寻找的状态失败,比如多个帧,而一个不不及时完成,有司机明明就是不回来的情况。
有人告诉我,“这是一个开源项目”,它可能不会/不能针对所有可能的情况进行更正,但我可以在适用的情况下进行修复并提交补丁。
从长远来看,这对我来说有点多,所以和你一样,我创建了自己的超时过程。因为我使用 Java,所以我创建了一个新线程,它在达到超时时尝试做几件事来让 WebDriver 返回,即使有时只是按下某些键让浏览器响应也能奏效。如果它没有返回,那么我会终止浏览器并重试。
再次启动驱动程序已经为我们处理了大多数情况,就好像浏览器的第二次加载允许它处于更稳定的状态(请注意,我们是从 VM 启动的,浏览器不断地想要检查更新并运行最近未启动时的某些例程)。
另一部分是我们首先启动一个已知的 url 并确认有关浏览器的某些方面,并且我们实际上能够在继续之前与其进行交互。通过这些步骤,失败率非常低,在所有浏览器/版本/操作系统(FF、IE、CHROME、Safari、Opera、iOS、Android 等)上进行 1000 次测试后,失败率约为 3%
最后但同样重要的是,对于您的情况,听起来您只需要捕获页面上的链接,而不需要完全的浏览器自动化。我可能会采用其他方法,即 cURL 和 linux 工具。
关于python - 可靠地检测页面加载或超时,Selenium 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18729483/
Giả sử tôi có trang mẹ. Khi tôi nhấp vào "In", một tab (trang) mới sẽ mở ra để xem trước bản in. Điều tôi muốn là khi tôi nhấp vào "In", một lớp phủ sẽ xuất hiện trên tab gốc (trang) để dừng công việc tiếp theo cho đến khi tab con được đóng lại. Bởi vì
Tôi biết điều này là không thể, nhưng tôi nghĩ dù sao thì tôi cũng nên đặt câu hỏi. Tôi có một trang HTTPS và tôi đang tạo một biểu mẫu động. Tôi muốn đăng biểu mẫu lên trang HTTP. Điều này có thể thực hiện được mà không cần trình duyệt bật lên cảnh báo không? Khi tôi làm điều này trên IE8
Trong ứng dụng của mình, tôi đã triển khai mẫu phía máy khách ajax 4.0, hiện tại mẫu của tôi nằm trên cùng một trang .aspx. (ví dụ Main.aspx) Nhưng tôi muốn thể hiện chúng ra bên ngoài. (tức là tất cả HTML sẽ được đặt trên một trang khác) Để làm điều này, tôi sử dụng
Tôi hiện đang xây dựng ứng dụng web của riêng mình. Có một thanh điều hướng trong tiêu đề của ứng dụng này. Tôi đã thêm cùng một thanh điều hướng vào tất cả các trang html của mình để nó vẫn hiển thị khi điều hướng giữa các trang và đặt thành phần điều hướng làm sự kiện cho trang tôi đang truy cập hiện tại. của tôi
Chúng tôi có một trang mạng nội bộ IIS7 chạy dưới một đường dẫn tích hợp chủ yếu là ASP.Net với một số trang ASP cổ điển truyền thống. Trang web cho phép truy cập ẩn danh vào hầu hết các khu vực, nhưng sử dụng Xác thực Windows để bảo vệ một số khu vực.
Có một yêu cầu là tôi cần chia một trang HTML lớn thành nhiều trang dựa trên điều kiện chiều cao của thẻ div vượt quá 700 pixel. Tôi cũng có thể chia trang dựa trên số từ. Ví dụ bên dưới chia trang dựa trên thẻ HTML và tôi cần chia trang dựa trên chiều cao div
Có hai trang html, nếu tôi nhấp vào một hình ảnh cụ thể ở trang đầu tiên, nó sẽ chuyển sang trang html thứ hai. Nếu bạn nhấp vào bất kỳ vị trí nào trên trang html thứ hai, nó sẽ đưa bạn trở lại trang đầu tiên và hiển thị trang thứ hai hoàn toàn trong div từ trang đầu tiên trong 1 giây
Tôi có một ứng dụng Hello world Servant đơn giản. Tôi cần thêm một số trang html tĩnh hoặc động vào đó. Làm thế nào tôi có thể làm điều này? Không có đề cập đến nó trong tài liệu. Lưu ý rằng tôi không muốn tạo h trong mã Haskell
Tôi có hai tệp index.html và index2.html. Cả hai tệp đều nằm trong cùng một thư mục trên máy cục bộ (không có quyền truy cập vào PHP, v.v.). Tôi đang làm việc về Tiêu đề trang bằng cách sử dụng jQuery từ index.h
Giả sử tôi có Id người dùng index.jsp của trang JSP:
Tôi đã phải đối mặt với một tình huống rất xa lạ đối với tôi. Tôi sẽ cố gắng làm mọi thứ đơn giản bằng cách giải thích từng bước một. 1) Trong trang A (biểu mẫu người dùng), tôi nhận được một số giá trị từ một trường và gửi chúng đến trang B dưới dạng jQuery AJAX POST. Đây là phần chính
Tôi đang cố gắng tìm ra cách tự động chuyển đổi chế độ hiển thị của cột thứ hai khi người dùng nhấp vào nút từ nút.html userinput.html. Tôi đang sử dụng bảng userinput.html DataTables và nghĩ rằng tôi đã
Tôi có asp. dự án mạng mvc4. Angularjs được tích hợp. Tôi đã xây dựng trang HTML và WEB API 2 theo yêu cầu trước đó. Bây giờ vì lý do nào đó tôi phải sử dụng các trang CSHTML. Trước đây tôi chỉ có web
Trang web của tôi chứa khoảng 18 trang khác nhau. Sau khi đăng nhập với tư cách quản trị viên, tôi nhấp vào "Trang". Tôi đã thấy phần sau Tất cả (20) | Của tôi (19) | Đã xuất bản (19) | Bản nháp (1) Không
Có phải mọi chức năng trong Haskell đều có trang man không? Nói cách khác, tôi có thể gõ man fst ở đâu đó và lấy trang hướng dẫn hoặc trang trợ giúp cho chức năng đó không? Tôi thấy số lượng tính năng quá lớn! Tôi đang sử dụng GHC và GHCi. Tôi không biết câu trả lời hay nhất
Tôi đã sử dụng các trang github trong một thời gian dài và sử dụng tính năng chuyển hướng tên miền tùy chỉnh để chuyển hướng trang web người dùng của tôi từ prahladyeri.github.io sang tên miền của riêng tôi https://www
Tôi có hiểu biết cơ bản về Github: Tôi biết cách tạo, thêm, cam kết, đẩy và sao chép một kho lưu trữ. Tôi cũng bắt đầu khám phá các trang Github để lưu trữ các dự án của mình. Tôi đã bắt đầu dự án mới nhất của mình vào tháng 3 và đẩy nó lên gh-page. Kể từ đó, tôi
Khi cố gắng xem nhật ký, Airflow hiển thị một trang rất tiếc với thông báo sau: Tệp "/Users/user/.pyenv/versions/3.5.2/lib/python3.5/locale.
Tôi đã làm theo các bước được liệt kê ở đây (https://pages.github.com/) để thiết lập Trang GitHub cho trang web tôi đang làm việc. Trang web tôi đã thiết lập hiện được lưu trữ trong IIS và sử dụng Viết lại URL
Tôi muốn chuyển hướng miền.com của mình đến trang openshift (openshift-app.rhcloud.com). Tôi đã làm như mô tả ở đây và nó hoạt động. Vấn đề duy nhất là, trên bất kỳ trang web nào, tôi không thể
Tôi là một lập trình viên xuất sắc, rất giỏi!