爬虫学习中.. 2021-09-10 15:55 采纳率: 37.5%
浏览 39

关于selenium爬虫爬取数据的问题

在我使用selenium爬取搜狗搜索时,在我定位到一个元素时,调用click方法点击,click方法没有生效,但是代码也没有报错,下面附上代码


```python
import re
import time
from random import randint
from selenium.webdriver import ActionChains
import requests
from selenium import webdriver

headers = {
    'cookie': 'xhsTrackerId=6c63302a-1349-481c-c87a-f844732b059a; extra_exp_ids=gif_exp1,ques_clt2; timestamp2=20210825200f5d61b66e3e6fd1020308; timestamp2.sig=uCH6dtCc1XYVK_M7-ATZCZtfP_vaKANJqMewd__gXWA',
    'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
}
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('https://www.sogou.com/')
time.sleep(1)
srk = driver.find_element_by_id('query')
srk.clear()
srk.click()
srk.send_keys('医院')
time.sleep(1)
su = driver.find_element_by_id('stb')
su.click()
time.sleep(3)

for q in range(5):
    link = driver.find_elements_by_xpath('//*[@id="main"]//div[contains(@class,"vrwrap")]')
    url_list = []
    for y in link:
        g = y.find_elements_by_xpath('./h3/a')
        if g:
            for o in g:
                a = o.get_attribute('href')
                if a is not None:
                    b = requests.get(url=a, headers=headers).text
                    # js重定向,提取出真实的url
                    h = list(set(re.findall('[a-zA-z]+://[^\s]*["$]', b)))[0][:-2]
                    if h[-1:] == '"':
                        h = h[:-1]
                    url_list.append(h)
                else:
                    url_list.append('0')
        else:
            url_list.append('0')
    print(url_list)
    for k in url_list:
        if '//yy.69jk.cn' in k:
            s = url_list.index(k)
            try:
                pink = driver.find_element_by_xpath('//*[@id="main"]/div[3]/div/div[%s]' % (s + 1))
            except:
                pink = driver.find_element_by_xpath('//*[@id="main"]/div[3]/div/div[%s]' % (s + 1))
            # 这里问题,无法点击元素
            ActionChains(driver).move_to_element(pink).click().perform()
            time.sleep(1)
            for i in range(3):
                v = driver.find_elements_by_tag_name("a")
                for c in v:
                    c.click()
                    time.sleep(randint(1, 5))
                    driver.back()
                    time.sleep(1)
                    all_pages = driver.window_handles  # 获得所有窗口句柄
                    driver.switch_to.window(all_pages[-1])
                    time.sleep(randint(1, 5))
            c = driver.current_url
            time.sleep(1)
            driver.quit()
            break
    else:
        pink = driver.find_element_by_xpath('//*[@id="sogou_page_%s"]' % (q + 2))
        pink.click()
        time.sleep(3)

```

  • 写回答

2条回答 默认 最新

  • 忍气吞声埋头苦干 2021-09-10 16:11
    关注

    可能两种情况,第一是元素定位错了,第二是在html中js未加载完成前点击了把,导致按钮js没生效

    评论

报告相同问题?

问题事件

  • 创建了问题 9月10日

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?