Làm cách nào để lấy mã html cho trang web bằng selen?

Phần này sẽ làm nổi bật hai trường hợp sử dụng để chứng minh việc sử dụng các phương pháp find_elements_by khác nhau. Thông thường, chúng tôi muốn cạo dữ liệu từ các bảng hoặc văn bản bài viết. Do đó, hai bản trình diễn bao gồm các trường hợp sử dụng này

Hãy để chúng tôi kiểm tra trang web trực tiếp này của một bài báo trực tuyến. Bài viết trên trang này có nhiều tiểu mục, mỗi tiểu mục có nhiều đoạn văn và thậm chí có cả gạch đầu dòng. Giả sử rằng chúng tôi muốn cạo toàn bộ văn bản của bài báo. Một cách thú vị để làm điều đó là cạo tất cả các tiểu mục riêng biệt trước và sau đó nối chúng lại với nhau. Ưu điểm của cách làm này là chúng ta cũng có thể lấy văn bản của từng tiểu mục

Hãy để chúng tôi Inspect trang web này. Hãy để chúng tôi di chuyển con trỏ đến phần tử DOM xác định khu vực nội dung bài viết. Dưới cái này

phần tử, chúng ta có thể thấy rằng các tiêu đề tiểu mục có tất cả các tên thẻ bắt đầu bằng "h", các đoạn văn có một

tên thẻ và các phần dấu đầu dòng có

    tên thẻ. Các phần tử có các tên thẻ này đều song song với nhau, thay vì được nhúng trong cấu trúc phân cấp. Thiết kế này quy định rằng chúng ta không nên viết một vòng lặp trong tập lệnh của mình để truy cập chúng, chẳng hạn như để truy cập từng đoạn trong tiểu mục. Một điểm khác cần lưu ý là ở đây chúng tôi sử dụng từ điển Python để lưu trữ văn bản của từng tiểu mục. Đối với mỗi cặp khóa-giá trị trong từ điển này, khóa lưu trữ tiêu đề tiểu mục và giá trị lưu trữ các đoạn văn bản của nó. Vì vậy, đây là một cấu trúc dữ liệu thuận tiện để sử dụng cho trường hợp sử dụng này. Chương trình sau đây thực hiện chiến lược của chúng tôi ở trên để cạo toàn bộ văn bản của bài viết

    # same as the set up chunk of code
    ...
    journalAddress = "//www.federalregister.gov/documents/2013/09/24/2013-21228/affirmative-action-and-nondiscrimination-obligations-of-contractors-and-subcontractors-regarding"
    # same as the set up chunk of code
    ...
    time.sleep[2]
    
    articleObjects = driver.find_elements_by_xpath['//div[@id="fulltext_content_area"]/*']
    
    articleDictionary = dict[]
    myKey = ""
    myValue_total = ""

    Chương trình trên đã đặt tất cả các phần tử web liên quan đến nội dung bài báo vào một danh sách gọi là “articleObjects”. Vì tất cả các phần tử web này song song với nhau chứ không phải trong một cấu trúc lồng nhau, nên chúng tôi chỉ cần sử dụng một cấp độ của vòng lặp for để lặp từng phần tử web trong danh sách và đưa nội dung của nó vào đúng vị trí trong từ điển mà chúng tôi đã tạo như . Nếu tên thẻ của một thành phần web trong danh sách bắt đầu bằng “h”, thì nội dung của nó phải là tiêu đề tiểu mục. Chúng tôi cạo nội dung của nó thành một biến chuỗi “myKey”. Nếu tên thẻ của một phần tử web trong danh sách bắt đầu bằng “p” hoặc “ul”, thì nội dung của nó phải là một đoạn văn hoặc một tập hợp các dấu đầu dòng bên dưới tiêu đề tiểu mục đó. Chúng tôi cạo nội dung của nó và nối nó vào một biến chuỗi “myValue_total”. Khi chúng ta gặp tiêu đề tiểu mục tiếp theo, chương trình phải nối thêm tất cả các đoạn văn và dấu đầu dòng bên dưới tiêu đề tiểu mục hiện tại và lưu chúng vào một chuỗi “myValue_total”. Tại thời điểm này, chúng tôi nhập cặp khóa-giá trị - tiêu đề tiểu mục hiện tại làm khóa và tất cả các đoạn văn và dấu đầu dòng bên dưới tiêu đề tiểu mục này làm giá trị của nó - vào từ điển. Sau đó, chúng tôi thay thế khóa là tiêu đề tiểu mục hiện tại bằng tiêu đề tiểu mục tiếp theo và lặp lại các bước trên

    for i in range[len[articleObjects]]:
        tagName = articleObjects[i].tag_name
        if tagName.startswith["h"]:
            if myKey:
                articleDictionary[myKey] = myValue_total
                myKey = ""
                myValue_total = ""
            myKey = articleObjects[i].get_attribute["innerText"]
        if tagName.startswith["p"]:
            myValue = articleObjects[i].get_attribute["innerText"]
            myValue_total = myValue_total + myValue
        if tagName.startswith["ul"]:
            myBullets = articleObjects[i].find_elements_by_tag_name['li']
            for j in range[len[myBullets]]:
                myBullet = myBullets[j].get_attribute["innerText"]
                myValue_total = myValue_total + myBullet
    driver.close[]

    Sau khi hoàn thành vòng lặp, chúng tôi đã loại bỏ tất cả các phần phụ một cách riêng biệt và lưu trữ chúng vào một từ điển. Cuối cùng, chúng ta chỉ cần lặp từng cặp khóa-giá trị trên từ điển này và nối nội dung của chúng lại với nhau khi chúng ta lặp qua từ điển

    Chúng ta có thể lấy nguồn html của một webelement với Selenium webdriver. Chúng ta có thể lấy thuộc tính InternalHTML để lấy nguồn của phần tử web

    InternalHTML là một thuộc tính của phần tử web tương đương với văn bản hiện diện giữa thẻ bắt đầu và thẻ kết thúc. Phương thức get_attribute được sử dụng cho việc này và InternalHTML được truyền dưới dạng đối số cho phương thức

    cú pháp

    s = element.get_attribute['innerHTML']

    Chúng tôi có thể lấy nguồn html của webelement với sự trợ giúp của Javascript Executor. Chúng ta sẽ sử dụng phương thức exec_script và truyền đối số index. innerHTML và phần tử web có nguồn html sẽ được truy xuất về phương thức

    cú pháp

    s = driver.find_element_by_id["txt-search"]
    driver.execute_script["return arguments[0].innerHTML;",s]

    Hãy cho chúng tôi xem mã html dưới đây của một phần tử. InternalHTML của phần tử sẽ là - Bạn đang duyệt tài nguyên tốt nhất cho Giáo dục trực tuyến

    Làm cách nào để xem mã nguồn của trang web bằng Selenium?

    Nó cho phép chúng tôi lấy mã của nguồn trang. .
    cú pháp. Chuỗi p = trình điều khiển. getPageSource[];.
    cú pháp. Trình điều khiển WebElement l=. findElement[By. tagName["body"]]; . getText[];
    Thí dụ. Triển khai mã với tổ chức nhập getPageSource. openqa

    Làm cách nào tôi có thể tải HTML bằng mã nguồn được kết xuất JavaScript bằng cách sử dụng Selenium?

    Chúng ta có thể lấy HTML với mã nguồn kết xuất JavaScript bằng cách sử dụng trình quản trị web Selenium. Selenium có thể thực thi các lệnh JavaScript với sự trợ giúp của phương thức execScript . Lệnh JavaScript được thực thi được truyền dưới dạng tham số cho phương thức. Để có được HTML, với JavaScript, chúng ta sẽ chuyển return document.

    Lệnh Selenium để lấy mã nguồn của trang hiện tại là gì?

    Lệnh tương ứng để lấy mã nguồn của trang web hiện tại có thể được viết là. trình điều khiển. getPageSource[];

    Thẻ HTML trong Selenium là gì?

    Thẻ HTML là các từ khóa ẩn trong trang web xác định cách trình duyệt web của bạn phải định dạng và hiển thị nội dung . Thẻ HTML là tên phần tử được bao quanh bởi dấu ngoặc nhọn. Một phần tử HTML thường bao gồm thẻ bắt đầu và thẻ kết thúc, với nội dung được chèn vào giữa.

Chủ Đề