Hướng dẫn requests click python - yêu cầu nhấp vào python

Tôi đã đăng nhập thành công vào một trang web và tải một bảng có thể được tải xuống dưới dạng tệp .xls. Vấn đề tôi đang gặp phải là một hình ảnh phải được nhấp để gọi tải xuống. Tôi chưa tìm ra cách đăng dữ liệu chính xác để tìm nạp tệp .xls.

Đây là HTML của trang web:

 <table border="0" width ="95%" align ="center">
    <tr>
        <form name="downloadXLSForm" method="POST" action="/control/filedownload">
            <input type="hidden" name="fileType" value="mlInventory">
            <td align="left" valign = "top">
                <font face="Verdana, Arial, Helvetica, sans-serif" size="-2">
                    <input type="image" src="../images/excel_download.jpg" onClick="document.downloadXLSForm.submit()" value="Excel Download" Alt="Download the results above into MS Excel">
                </font>
            </td>
        </form>         
        <td align="right" valign = "top">
            <form name="mlInventorysearch" method="post" action="/control/mlinventorysearch">
                <input type="hidden" name="refreshSearch" value="true">
                <input type="submit" value="New Search">
            </form>
        </td>
    </tr>
  </table>

Có một liên kết được nhúng trong trang web trỏ đến https://www.emlco.com/control/filedownload nhưng khi tôi cố gắng và nhận được nó, trang trống.

Đây là mã của tôi:

with requests.Session() as z:
    z.get("https://www.emlco.com/control/j_security_check", stream=True)
    p3 = z.post("https://www.emlco.com/control/j_security_check",data=payload3) 
    z.get(link)
    inventory_start = z.post(link, data={'newSearch':'true'})
    inventory_excel = z.post(link,data={'fileType':'mlInventory'})
    #inventory_excel = z.post('https://www.emlco.com/control/filedownload',data={'fileType':'mlInventory'})
    inventory_excel = z.get('https://www.emlco.com/control/filedownload', stream = True)
    #output = open('MLCStock.xls', 'wb')
    #output.write(inventory_excel.content)
    #output.close()

    print(inventory_excel.url)
    print(inventory_start.url)
    print("Done")

Tôi xin lỗi vì những bình luận dư thừa. Tôi đã thử các kết hợp khác nhau để xem những gì sẽ mất.

Cảm ơn trước. Tôi khá mới ở Python.

Tôi có trang web nhỏ này tôi muốn điền vào một biểu mẫu với thư viện yêu cầu. Vấn đề là tôi không thể đến trang web tiếp theo khi điền vào dữ liệu biểu mẫu và nhấn nút (Enter không hoạt động).

Điều quan trọng là tôi không thể làm điều đó thông qua một cú nhấp chuột nào đó. Điều này cần phải được thực hiện để tôi có thể chạy mà không cần đồ họa.

info = {'name':'JohnJohn',
        'message':'XXX',
        'sign':"XXX",
        'step':'1'}

Ba mục đầu tiên Tên, tin nhắn, dấu hiệu là các khu vực văn bản và bước là tôi nghĩ nút.

r = requests.get(url)
r = requests.post(url, data=info)

print(r.text)

Dữ liệu biểu mẫu trông như thế này khi tôi gửi yêu cầu qua Chrome theo cách thủ công:

  • name:JohnJohn
  • message:XXX
  • sign:XXX
  • step:1

Phần tử nút trông như thế này:

<td colspan="2" style="text-align: center;">
    <input name="step" type="hidden" value="1">
    <button id="button" type="button" onclick="myClick();"
     style="background-color: #ef4023;  width: 80px; font-face: times; font-size: 14pt;">
        Wyślij
    </button>
</td>

Trang web tiếp theo nếu tôi làm điều này thủ công có cùng ADRE.

Chào bạn!

Tôi đã tự hỏi làm thế nào chính xác tôi sẽ sử dụng thư viện yêu cầu của Python để nhấp vào các nút trên trang web. Sau khi tôi nhấp vào nút trên trang web, tôi muốn có thể truy cập trang mà tôi được chuyển hướng đến.

Ví dụ, nếu tôi muốn truy cập trang chủ của R/LearnPython và sau đó nhấp vào nút "Tạo bài đăng" để có trang web chuyển hướng tôi đến trang cho phép tôi tạo một bài đăng, tôi sẽ sử dụng các yêu cầu như thế nào?

r = requests.get ('https://www.reddit.com/r/learnpython/new/')

Giữ cho tôi rằng tôi không muốn truy cập URL "https://www.reddit.com/r/learnpython/submit" trực tiếp. Tôi muốn có thể chủ động nhấn nút "Tạo bài đăng" trong ví dụ này. Tôi cũng không muốn sử dụng Selenium hoặc bất kỳ giải pháp nào khác yêu cầu tôi phải mở GUI của trình duyệt.

Tôi biết điều này là cơ bản nhưng tôi không thể cho cuộc sống của tôi tìm thấy một bài viết cho tôi một câu trả lời rõ ràng cho câu hỏi này. Cảm ơn vì đã dành thời gian cho tôi!!!

TL; DR: Đừng nghĩ rằng chức năng này vẫn có sẵn với các yêu cầu-HTML, vì đối số tập lệnh chỉ được sử dụng để xóa HTML tĩnh (và không chạy JS trên một trang động). Có vẻ như selenium là tùy chọn duy nhất (nếu nhấp nút khiến dữ liệu hiện có trên trang thay đổi, thay vì mở một trang mới và phương thức cho nút nhấp chuột được đặt trong phần phụ trợ)?

Khi tôi cố gắng đặt JS vào tập lệnh, tôi sẽ gặp lỗi của Puppeteer.

Ví dụ: tôi có mã sau: script = "" "() => {let nút = document.getelementsbyClassName (" khóa học ") [0] nút.click () ngủ = 5, thời gian chờ = 10000, script = script, keep_page = true)
script = """
() => {
let button = document.getElementsByClassName("course-title")[0]
button.click()
}
"""
r.html.render(sleep=5, timeout=10000, script=script, keep_page=True)

và tôi nhận được lỗi: pyppeteer.errors.elementhandleerror: Đánh giá thất bại: typeerror: Không thể đọc thuộc tính 'Nhấp' của không xác định tại pyppeteer_evaluation_script: 4: 20
pyppeteer.errors.ElementHandleError: Evaluation failed: TypeError: Cannot read property 'click' of undefined
at pyppeteer_evaluation_script:4:20

Tôi nghĩ rằng có lẽ nội dung trang không được hiển thị đúng, vì vậy tôi đã viết (điều này ở ngay trên nơi tập lệnh được khai báo) với Open ('phản hồi.txt', 'w', mã hóa = 'utf-8') là f: F.Write (R.Text) để có được nội dung của HTML và phần tử đã tồn tại trên trang.
with open('response.txt', 'w', encoding='utf-8') as f:
f.write(r.text)
to get the content of the HTML, and the element did exist on the page.

Lỗi tương tự khi cố gắng sử dụng jQuery (trang web có mã bật jQuery) mã: script = "" "() .
Code:
script = """
() => {
$(document).ready(function() {
$(".course-title")[0].click();
})
}
"""
response = r.html.render(sleep=5, timeout=10000, script=script, keep_page=True)

Lỗi: phản hồi không có
response is None

Vì vậy, sau đó tôi muốn kiểm tra xem JS thậm chí còn hoạt động và viết: script = "" "" () => {return 1+1;} "" " = script, keep_page = true) in (phản hồi)
script = """
() => {
return 1+1;
}
"""
response = r.html.render(sleep=5, timeout=10000, script=script, keep_page=True)
print(response)

Đầu ra: 2
2

Điều này có nghĩa là vai trò của việc chuyển tập lệnh cho hàm kết xuất không phải là chạy tập lệnh trên trang, mà là để chạy tập lệnh để xóa nội dung HTML tĩnh của trang. Mặt khác, phản hồi sẽ là một đối tượng (requests.response () đối tượng với các thuộc tính .text và phương thức .json (), v.v.). Hơn nữa, trong trường hợp nút nhấp vào chỉnh sửa nội dung trên trang và phương thức cho nhấp chuột nằm trong phần phụ trợ (ý tôi là đây là lý do duy nhất bạn phải nhấp vào nút ở vị trí đầu tiên, nếu không thì chỉ cần nhìn vào Điểm cuối URL, hoặc phương thức cho nhấp chuột làm gì), không thể nhận được phản hồi HTML là vô dụng? Điều này phù hợp với tài liệu cho các yêu cầu-HTML trong đó lần duy nhất họ đề cập đến kết xuất (script = script) nằm trong dòng "Bạn cũng có thể hiển thị các trang JavaScript mà không cần yêu cầu:" và trong phần này, JS chỉ đơn giản là chạy trên Chuỗi HTML (và JS này chỉ để có được thông tin trong HTML) và sự trở lại của kết xuất chỉ là sự trở lại của mã JS có trong tập lệnh.
This matches up with the documentation for requests-HTML where the only time they mention render(script=script) is under the line "You can also render JavaScript pages without Requests:", and in this section, the js is simply run on a HTML string (and this js is just for getting information in the HTML), and the return of the render is just the return of the js code that was in script.

Làm thế nào để bạn mô phỏng một nút nhấp vào trong Python?

1 câu trả lời..

Nhấn phím F12 để nhập nó và chọn tab mạng ..

Đã nhấp vào nút "Hiển thị thêm các ví dụ" ..

Tìm thấy yêu cầu cuối cùng ("BST-query-Service").

Nhấp chuột phải và đã chọn Sao chép> Sao chép dưới dạng Curl (CMD).

Làm thế nào để bạn nhấn một nút trên một trang web bằng Python?

Chúng ta có thể tìm thấy nút trên trang web bằng cách sử dụng các phương thức như find_element_by_class_name (), find_element_by_name (), find_element_by_id (), sau đó sau khi tìm nút/phần tử chúng ta có thể nhấp vào phương thức Click ().Điều này sẽ nhấp vào nút và một cửa sổ bật lên sẽ được hiển thị.