Hướng dẫn python requests click button - nút bấm yêu cầu python

Tôi đã đăng nhập vào trang web này bằng cách gửi thông tin đăng nhập và mật khẩu thông qua POST.

Tôi không cần phải truyền tất cả dữ liệu biểu mẫu, chỉ để nhấp vào gửi nút có thể hiển thị dưới dạng "Zapisz Zmiany".

Có thể với các thư viện requests hoặc scrapy không?

Hỏi ngày 30 tháng 10 năm 2019 lúc 7:57Oct 30, 2019 at 7:57

5

Bạn có thể cố gắng sử dụng Scrapy FormRequest.from_response[] [nhưng không có gì đảm bảo rằng nó sẽ hoạt động vì trang của bạn có thể sử dụng JavaScript]:

yield scrapy.FormRequest.from_response[
    response=response,
    formname="your_form_name", # you can get it from DevTools in your browser
    formdata={
        "form_field_1": "value_1", # you can get fields / values from the Network tab in DevTools [after you submit your form]
    },
    callback=self.parse_form, # a code that will process response
]

Đã trả lời ngày 30 tháng 10 năm 2019 lúc 9:34Oct 30, 2019 at 9:34

Gangabassgangabassgangabass

10,5K2 Huy hiệu vàng22 Huy hiệu bạc35 Huy hiệu Đồng2 gold badges22 silver badges35 bronze badges

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:


    
    
        Wyślij
    

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 ['//www.reddit.com/r/learnpython/new/']

Giữ cho tôi rằng tôi không muốn truy cập URL "//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ị.

Bài Viết Liên Quan

Chủ Đề