俄罗斯贵宾会-俄罗斯贵宾会官网
做最好的网站

网页截图实现关键词高亮俄罗斯贵宾会

Web截图实现关键词高亮

俄罗斯贵宾会 1

代码

from selenium import webdriver
import time
import sys
import re
from PIL import Image
from io import BytesIO

DEBUG_MODE = True

with open("jquery.min.js") as jquery_file:
    JQUERY_SCRIPT = jquery_file.read()


def log(msg):
    if DEBUG_MODE:
        print(msg)


def capture_with_highlight(url, save_fn="capture.png", keywords=None):
    def init_browser():
        browser = webdriver.PhantomJS(service_log_path="log/"+save_fn+".log")
        browser.set_window_size(1400, 900)
        browser.set_page_load_timeout(40)  
        browser.set_script_timeout(40)
        return browser
    browser=init_browser()                                 
    log("正在打开页面:"+url)
    browser.get(url)  # Load page
    log("执行滚动脚本")
    browser.execute_script("""
        var y = 0;
        var step = 100;
        window.scroll(0, 0);

        function f() {
            if (y < document.body.scrollHeight) {
            y += step;
            window.scroll(0, y);
            setTimeout(f, 100);
            } else {
            window.scroll(0, 0);
            document.title += "scroll-done";
            }
        }
        setTimeout(f, 1000);
    """)

    for i in range(30):
        if "scroll-done" in browser.title:
            break
        time.sleep(1)

    log("滚动完成,判定关键词命中并添加高亮")
    if keywords:
        reg = "(" + ")|(".join(keywords) + ")"

        def loading_jquery(browser):
            has_jq = browser.execute_script(
                """return typeof(jQuery)!="undefined" """)
            if not has_jq:
                log("加载jquery脚本")
                browser.execute_script(JQUERY_SCRIPT)

        loading_jquery(browser)
        has_hit = browser.execute_script(
            """return $('body')&&/%s/.test($('body').text())""" % reg)
        if not has_hit:
            log("未在页面上找到关键词")
            browser.close()
            return False
        browser.execute_script("""
            var addHighlight=function(){
                var re=RegExp("%s")
                var hits = jQuery('body').find("*")
                                    .filter(function () {
                                        var obj = jQuery(this).clone();
                                        obj.find(':nth-child(n)').remove();
                                        return re.test(obj.text()); 
                                    })
                re.global = true
                hits.each(function () {
                    var html = jQuery(this).html()
                    html = html.replace(re, "%s")
                    jQuery(this).html(html)
                });
            }
            addHighlight()
            """ % (reg, "".join(["$%s" % (i + 1) for i in range(len(keywords))])))
    png_data = browser.get_screenshot_as_png()
    img = Image.open(BytesIO(png_data))
    background = Image.new("RGB", img.size, (255, 255, 255))
    background.paste(img, mask=img.split()[3])
    background.save("img/"+save_fn, 'JPEG', quality=80)
    return True


if __name__ == "__main__":
    capture_with_highlight(
        "https://item.jd.com/10124713723.html", keywords=["老字号"])

2017-01-03-19-28-33-598.jpg

结果(部份截图)

俄罗斯贵宾会 2

俄罗斯贵宾会 3

流程图

俄罗斯贵宾会 4

2017-01-03-19-34-48-524.jpg

俄罗斯贵宾会 5

2017-01-03-19-37-44-639.jpg

俄罗斯贵宾会 6

2017-01-03-19-43-23-339.jpg

俄罗斯贵宾会 7

IMG_3613.PNG

俄罗斯贵宾会 8

QQ截图20161226224911.png

俄罗斯贵宾会 9

QQ截图20161226230949.png

俄罗斯贵宾会 10

QQ截图20161226231322.png

俄罗斯贵宾会 11

QQ截图20161226232800.png

俄罗斯贵宾会 12

QQ截图20161229213112.png

俄罗斯贵宾会 13

QQ截图20161229213517.png

俄罗斯贵宾会 14

QQ截图20161229213939.png

俄罗斯贵宾会 15

QQ截图20161229221125.png

俄罗斯贵宾会 16

QQ截图20161230204251.png

俄罗斯贵宾会 17

QQ截图20161230210000.png

俄罗斯贵宾会 18

QQ截图20161230211223.png

俄罗斯贵宾会 19

QQ截图20161230211629.png

俄罗斯贵宾会 20

QQ截图20161230213600.png

俄罗斯贵宾会 21

QQ截图20161230214707.png

俄罗斯贵宾会 22

俄罗斯贵宾会,QQ截图20161230215729.png

俄罗斯贵宾会 23

QQ截图20161230220050.png

俄罗斯贵宾会 24

QQ截图20161230223556.png

俄罗斯贵宾会 25

QQ截图20161230225314.png

俄罗斯贵宾会 26

QQ截图20161230230809.png

俄罗斯贵宾会 27

QQ截图20170102204030.png

俄罗斯贵宾会 28

QQ截图20170102204253.png

俄罗斯贵宾会 29

QQ截图20170102205756.png

俄罗斯贵宾会 30

QQ截图20170102210029.png

俄罗斯贵宾会 31

QQ截图20170102211129.png

俄罗斯贵宾会 32

QQ截图20170102211340.png

俄罗斯贵宾会 33

QQ截图20170102211735.png

俄罗斯贵宾会 34

QQ截图20170102212150.png

俄罗斯贵宾会 35

QQ截图20170102212323.png

俄罗斯贵宾会 36

QQ截图20170102212848.png

俄罗斯贵宾会 37

QQ截图20170102214305.png

俄罗斯贵宾会 38

QQ截图20170102215808.png

俄罗斯贵宾会 39

QQ截图20170102220023.png

俄罗斯贵宾会 40

QQ截图20170102220724.png

俄罗斯贵宾会 41

QQ截图20170102222942.png

俄罗斯贵宾会 42

QQ截图20170102223019.png

俄罗斯贵宾会 43

QQ截图20170102223057.png

俄罗斯贵宾会 44

QQ截图20170102224620.png

俄罗斯贵宾会 45

QQ截图20170102225616.png

俄罗斯贵宾会 46

QQ截图20170102225917.png

俄罗斯贵宾会 47

QQ截图20170102230650.png

俄罗斯贵宾会 48

QQ截图20170102231429.png

俄罗斯贵宾会 49

QQ截图20170103202003.png

俄罗斯贵宾会 50

QQ截图20170103221112.png

俄罗斯贵宾会 51

QQ截图20170103235441.png

俄罗斯贵宾会 52

QQ截图20170103235745.png

俄罗斯贵宾会 53

QQ截图20170104000434.png

俄罗斯贵宾会 54

QQ截图20170104000541.png

俄罗斯贵宾会 55

QQ截图20170104000743.png

俄罗斯贵宾会 56

QQ截图20170104001208.png

俄罗斯贵宾会 57

QQ截图20170104001603.png

俄罗斯贵宾会 58

QQ截图20170104002428.png

俄罗斯贵宾会 59

QQ截图20170104002603.png

俄罗斯贵宾会 60

QQ截图20170104201322.png

俄罗斯贵宾会 61

QQ截图20170104203327.png

俄罗斯贵宾会 62

QQ截图20170104213110.png

俄罗斯贵宾会 63

QQ截图20170104213305.png

俄罗斯贵宾会 64

QQ截图20170105200009.png

俄罗斯贵宾会 65

QQ截图20170105220915.png

俄罗斯贵宾会 66

QQ截图20170105221833.png

俄罗斯贵宾会 67

QQ截图20170105222408.png

俄罗斯贵宾会 68

QQ截图20170105224143.png

俄罗斯贵宾会 69

QQ截图20170105234809.png

俄罗斯贵宾会 70

QQ截图20170107234711.png

俄罗斯贵宾会 71

QQ截图20170108092017.png

俄罗斯贵宾会 72

QQ截图20170108092634.png

俄罗斯贵宾会 73

QQ截图20170108094016.png

俄罗斯贵宾会 74

QQ截图20170108094353.png

俄罗斯贵宾会 75

QQ截图20170108103712.png

俄罗斯贵宾会 76

QQ截图20170108105716.png

俄罗斯贵宾会 77

QQ截图20170108153033.png

俄罗斯贵宾会 78

QQ截图20170108160619.png

俄罗斯贵宾会 79

QQ截图20170108160838.png

俄罗斯贵宾会 80

QQ截图20170108161512.png

俄罗斯贵宾会 81

QQ截图20170108161940.png

俄罗斯贵宾会 82

QQ截图20170108212503.png

俄罗斯贵宾会 83

QQ截图20170108220105.png

俄罗斯贵宾会 84

QQ截图20170108223405.png

俄罗斯贵宾会 85

QQ截图20170108223814.png

俄罗斯贵宾会 86

QQ截图20170108230357.png

俄罗斯贵宾会 87

QQ截图20170108234118.png

俄罗斯贵宾会 88

QQ截图20170108235554.png

俄罗斯贵宾会 89

QQ截图20170109002055.png

俄罗斯贵宾会 90

QQ截图20170109002545.png

俄罗斯贵宾会 91

QQ截图20170109004812.png

俄罗斯贵宾会 92

QQ截图20170109205751.png

俄罗斯贵宾会 93

QQ截图20170109212707.png

俄罗斯贵宾会 94

QQ截图20170110202005.png

俄罗斯贵宾会 95

QQ截图20170110205337.png

俄罗斯贵宾会 96

QQ截图20170112225053.png

俄罗斯贵宾会 97

QQ截图20170112231523.png

俄罗斯贵宾会 98

QQ截图20170112232733.png

俄罗斯贵宾会 99

QQ截图20170112233046.png

俄罗斯贵宾会 100

QQ截图20170114203107.png

俄罗斯贵宾会 101

QQ截图20170114212345.png

俄罗斯贵宾会 102

QQ截图20170114212620.png

俄罗斯贵宾会 103

QQ截图20170114214517.png

俄罗斯贵宾会 104

QQ截图20170114214952.png

俄罗斯贵宾会 105

QQ截图20170114215225.png

俄罗斯贵宾会 106

QQ截图20170115000559.png

俄罗斯贵宾会 107

QQ截图20170115000855.png

俄罗斯贵宾会 108

QQ截图20170115084538.png

俄罗斯贵宾会 109

QQ截图20170115085116.png

俄罗斯贵宾会 110

QQ截图20170115085230.png

俄罗斯贵宾会 111

QQ截图20170115090219.png

俄罗斯贵宾会 112

QQ截图20170115090628.png

俄罗斯贵宾会 113

QQ截图20170115090943.png

俄罗斯贵宾会 114

QQ截图20170115092713.png

俄罗斯贵宾会 115

QQ截图20170115093103.png

俄罗斯贵宾会 116

QQ截图20170115093556.png

俄罗斯贵宾会 117

QQ截图20170115094544.png

俄罗斯贵宾会 118

QQ截图20170115095044.png

俄罗斯贵宾会 119

QQ截图20170115101044.png

俄罗斯贵宾会 120

QQ截图20170115101526.png

俄罗斯贵宾会 121

QQ截图20170115110048.png

俄罗斯贵宾会 122

QQ截图20170115120622.png

俄罗斯贵宾会 123

QQ截图20170115121640.png

俄罗斯贵宾会 124

QQ截图20170115122403.png

俄罗斯贵宾会 125

QQ截图20170115122704.png

俄罗斯贵宾会 126

QQ截图20170115124538.png

俄罗斯贵宾会 127

QQ截图20170115124738.png

俄罗斯贵宾会 128

QQ截图20170115124851.png

俄罗斯贵宾会 129

QQ截图20170115145645.png

俄罗斯贵宾会 130

QQ截图20170115150351.png

俄罗斯贵宾会 131

QQ截图20170115153342.png

俄罗斯贵宾会 132

QQ截图20170115164326.png

俄罗斯贵宾会 133

本文由俄罗斯贵宾会发布于编程,转载请注明出处:网页截图实现关键词高亮俄罗斯贵宾会

您可能还会对下面的文章感兴趣: