hahawangzi 发表于 2020-11-17 16:03

用selenuim来爬图片,但下拉操作不成功,地址只能爬一部分

url = "https://www.89tv.cc/Comic/885.html"
headers={
         'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
      
         
      }

def token(adr:str):
    driver=webdriver.Chrome()
    driver.get(adr)
    page=driver.page_source
    #r2=requests.get(adr,headers=headers)
    soup2=BeautifulSoup(page,"lxml")
    #print(soup2)
    s2=soup2.find("ul",class_="comic-contain")
    #print(s2)
    n=0
    for j in s2.find_all("li"):
      print(j.find("img").get("src"))
      time.sleep(2)
      n+=300
      driver.execute_script("window.scrollBy(0, 700)"); 这里浏览器不下拉不成功,各位能否帮忙看看。
         #我试过直接用requests.get 但是无法获取图片 用了JS加载的,用selenuim 可以抓取,但是浏览器需要下拉才行,但是下拉没反应
    driver.close()   
def main():
    dict={}
    r=requests.get(url,headers=headers)
    soup=BeautifulSoup(r.text,"lxml")
    #print(soup)
    s=soup.find("ul",class_="list-unstyled text-center vod-item-play ff-item-playurl")
    for i in s.find_all("li",class_="col-xs-4"):
      dict["title"]=i.getText()
      dict["addr"]=i.find('a').get("href")
      print(dict["title"])
      #print(dict["addr"])
      token(dict["addr"])

154675361 发表于 2020-11-17 16:59

我也是这样写的,不过是可以模拟下滑的
https://cdn.jsdelivr.net/gh/jsongmax/img/img/20201117165756.png

fightingmy 发表于 2020-11-17 16:59

页面明显是隐藏了系统滚动条的,自己重新实现了一遍
你需要去看网站怎么实现滚动的

154675361 发表于 2020-11-17 17:03

https://cdn.jsdelivr.net/gh/jsongmax/img/img/20201117170255.png


随便找了个以前的代码改的,和你写的一样,但是可以下滑的

magicianly 发表于 2020-11-17 17:13

本帖最后由 magicianly 于 2020-11-17 17:24 编辑


我想说你是不是看漏了……

imyxuan 发表于 2020-11-17 17:29

大概看了一下,所有图片的地址是在js里面有一段代码生成的,具体没研究,楼主可以看看有没有用
eval(function(p, a, c, k, e, r) {
    e = function(c) {
      return (c < a ? "" : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
    }
    ;
    if (!"".replace(/^/, String)) {
      while (c--)
            r = k || e(c);
      k = [function(e) {
            return r
      }
      ];
      e = function() {
            return "\\w+"
      }
      ;
      c = 1
    }
    while (c--)
      if (k)
            p = p.replace(new RegExp("\\b" + e(c) + "\\b","g"), k);
    return p
}("p y(){i=\"J+/=\";O.D=p(c){s a=\"\",b,d,h,f,g,e=0;C(c=c.z(/[^A-G-H-9\\+\\/\\=]/g,\"\");e<c.k;)b=i.l(c.m(e++)),d=i.l(c.m(e++)),f=i.l(c.m(e++)),g=i.l(c.m(e++)),b=b<<2|d>>4,d=(d&15)<<4|f>>2,h=(f&3)<<6|g,a+=7.5(b),w!=f&&(a+=7.5(d)),w!=g&&(a+=7.5(h));v a=u(a)};u=p(c){C(s a=\"\",b=0,d=17=8=0;b<c.k;)d=c.o(b),Q>d?(a+=7.5(d),b++):R<d&&S>d?(8=c.o(b+1),a+=7.5((d&F)<<6|8&r),b+=2):(8=c.o(b+1),x=c.o(b+2),a+=7.5((d&15)<<12|(8&r)<<6|x&r),b+=3);v a}}s B=I y(),T=W['K'+'L'].M(''),N=W['n'+'P'+'e'],j,t,q;N=N.U(/\\d++/g);j=N.k;X(j--){t=Y(N)&10;q=N.z(/\\d+/g,'');T.11(t,q.k)}T=T.13('');14=16.E(B.D(T));", 62, 70, "|||||fromCharCode||String|c2||||||||||_keyStr|len|length|indexOf|charAt||charCodeAt|function|str|63|var|locate|_utf8_decode|return|64|c3|Base|replace|||for|decode|parse|31|Za|z0|new|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789|DA|TA|split||this|onc|128|191|224||match|zA||while|parseInt||255|splice||join|_v||JSON|c1".split("|"), 0, {}))

浏览器直接跑一下这个代码就能看到结果了

hahawangzi 发表于 2020-11-18 09:24

imyxuan 发表于 2020-11-17 17:29
大概看了一下,所有图片的地址是在js里面有一段代码生成的,具体没研究,楼主可以看看有没有用


教我一下怎么 搞 直接用浏览器运行js软件
不用模拟Selenium

hahawangzi 发表于 2020-11-18 09:52

magicianly 发表于 2020-11-17 17:13
我想说你是不是看漏了……

普通爬取 怎么执行这个

hahawangzi 发表于 2020-11-18 09:53

154675361 发表于 2020-11-17 17:03
随便找了个以前的代码改的,和你写的一样,但是可以下滑的

这里可以滚动 主要是 漫画里面

magicianly 发表于 2020-11-18 09:56

hahawangzi 发表于 2020-11-18 09:52
普通爬取 怎么执行这个

普通爬取啥意思,requests就行了啊,感觉还行吧,不难啊
页: [1] 2
查看完整版本: 用selenuim来爬图片,但下拉操作不成功,地址只能爬一部分