python学习第六天

selenium选择之Xpath

根据xpath语法查找,从/根节点开始找第一个

html=driver.find_element_by_xpath('/html')
    html=driver.find_element_by_xpath('/head')#报错,因为根部是从html开始的
    print(html.tag_name)
//表示节点开始找任意一个节点
 div = driver.find_element_by_xpath('//div')
    print(div.tag_name)
查找id为imagesdediv标签
div = driver.find_element_by_xpath('//div[@id="images"]')
    print(div.tag_name)
    print(div.text)
找到第一个a节点
 a = driver.find_element_by_xpath('//a')
    print(a.tag_name)
找到所有a节点
a_s= driver.find_elements_by_xpath('//a')#注意这里用了elements
    print(a_s)
找到第一个a节点的href属性
#get_attribute:获取节点中某个属性
    a = driver.find_element_by_xpath('//a').get_attribute('href')
    print(a)

完整代码为:

from selenium import webdriver
import  time
driver=webdriver.Chrome()

driver.maximize_window()

try:
    #隐式等待,写在get请求之前###若为显示等待,写在get请求之后
    driver.implicitly_wait(10)
    driver.get('https://doc.scrapy.org/en/latest/_static/selectors-sample1.html')
  



    #根据xpath语法查找
    #从/根节点开始找第一个
    html=driver.find_element_by_xpath('/html')
    html=driver.find_element_by_xpath('/head')#报错
    print(html.tag_name)

    #//从根节点开始找任意一个节点
    div = driver.find_element_by_xpath('//div')
    print(div.tag_name)


    #@
    #查找id为imagesdediv标签
    div = driver.find_element_by_xpath('//div[@id="images"]')
    print(div.tag_name)
    print(div.text)

    #找到第一个a节点
    a = driver.find_element_by_xpath('//a')
    print(a.tag_name)

    #找到所有a节点
    a_s= driver.find_elements_by_xpath('//a')
    print(a_s)

    #找到第一个a节点的href属性
    #get_attribute:获取节点中某个属性
    a = driver.find_element_by_xpath('//a').get_attribute('href')
    print(a)



finally:
    driver.close()

实现自动打开三个网页,自动前进回退的过程

'''
前进、后退
'''
from selenium import webdriver
import time

driver = webdriver.Chrome()

driver.maximize_window()
try:
    driver.implicitly_wait(10)
    driver.get('https://www.jd.com/')
    driver.get('https://www.baidu.com/')
    driver.get('https://www.cnblogs.com/')

    time.sleep(2)

    # 回退操作
    driver.back()
    time.sleep(1)
    # 前进操作
    driver.forward()
    time.sleep(1)
    driver.back()
    time.sleep(10)

finally:
    driver.close()

用selenium实现自动那个登录京东输入“围城”后自动清除再搜索“墨菲定律”的过程

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import  time
driver=webdriver.Chrome()

driver.maximize_window()

try:
    driver.implicitly_wait(10)
        #往京东发送请求
    driver.get('http://www.jd.com/')
      #找到输入框输入围城
    input_tag=driver.find_element_by_id('key')
    input_tag.send_keys('围城')
#键盘回车
    input_tag.send_keys(Keys.ENTER)
    time.sleep(2)
#找到输入框输入墨菲定律
    input_tag=driver.find_element_by_id('key')
    input_tag.clear()
    input_tag.send_keys('墨菲定律')
#找到搜索按钮点击搜索
    button=driver.find_element_by_class_name('button')
    button.click()
    time.sleep(10)

finally:
    driver.close()

选项卡之向一个网页发送百度请求后,新建一个选项卡,为其请求淘宝链接,返回第一个时又向新浪发送链接

'''
选项卡
'''
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import  time
browser=webdriver.Chrome()

browser.maximize_window()

try:
    browser.implicitly_wait(10)
    browser.get('http://www.baidu.com/')

    #execute_script:执行javascript代码
    #弹窗操作
    #browser.execute_script( 'alert("zmm")')

    #新建浏览器窗口
    browser.execute_script( '''
    window.open()
    ''')

    print(browser.window_handles)#获取所有选项卡
    #切换到第二个窗口
    #新的表示法
    #browser.switch_to.window(browser.window_handles[1])
    #旧的
    browser.switch_to_window(browser.window_handles[1])


    #网第二个窗口发送淘宝请求
    browser.get("http://www.taobao.com/")
    time.sleep(5)

    #切换到第一个窗口
    browser.switch_to_window(browser.window_handles[0])
    browser.get("http://www.sina.com/")

    time.sleep(10)


finally:
    browser.close()

通过selenium爬取京东第一页macbook的代码:

'''
请求url:
    https://www.jd.com/
提取商品信息
    1、商品详情页
    2、商品名称
    3、商品价格
    4、评鉴人数
    5商品商家
'''
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()

driver.maximize_window()

try:
    # 隐式等待,写在get请求之前###若为显示等待,写在get请求之后
    driver.implicitly_wait(10)
    #1往京东主页发送请求
    driver.get('https://www.jd.com/')

    #2、输入商品名称,并输入回车
    input_tag=driver.find_element_by_id('key')
    input_tag.send_keys('macbook')
    input_tag.send_keys(Keys.ENTER)

    #3查找所商品div
    good_list=driver.find_elements_by_class_name('gl-item')
    for good in good_list:
        #根据属性选择器查找
        #商品链接
        good_url=good.find_element_by_css_selector('.p-img a').get_attribute('href')

        #商品名称
        good_name=good.find_element_by_css_selector('.p-name em').text.replace("
","--")

        #商品价格
        good_price=good.find_element_by_class_name('p-price').text.replace("
",":")

        #评价人数
        good_commit=good.find_element_by_class_name('p-commit').text.replace("
"," ")

        #尚品尚家
        good_from = good.find_element_by_class_name('J_im_icon').text.replace("
", " ")

        good_content=f'''
                        商品链接:{good_url}
                        商品名称:{good_name}
                        商品价格:{good_price}
                        评价人数:{good_commit}
                        商品商家:{good_from}
                        
        
        
        '''

        print(good_content)
        with open('jd.txt','a',encoding='utf-8') as f:
            f.write(good_content)
    time.sleep(10)


finally:
    driver.close()

增加滚轮模块和爬取京东所有内容的代码:

'''
爬取京东商品信息:
    请求url:
        https://www.jd.com/
    提取商品信息:
        1.商品详情页
        2.商品名称
        3.商品价格
        4.评价人数
        5.商品商家
'''
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time


def get_good(driver):
    try:

        # 通过JS控制滚轮滑动获取所有商品信息
        js_code = '''
            window.scrollTo(0,5000);
        '''
        driver.execute_script(js_code)  # 执行js代码

        # 等待数据加载
        time.sleep(2)

        # 3、查找所有商品div
        # good_div = driver.find_element_by_id('J_goodsList')
        good_list = driver.find_elements_by_class_name('gl-item')
        n = 1
        for good in good_list:
            # 根据属性选择器查找
            # 商品链接
            good_url = good.find_element_by_css_selector(
                '.p-img a').get_attribute('href')

            # 商品名称
            good_name = good.find_element_by_css_selector(
                '.p-name em').text.replace("
", "--")

            # 商品价格
            good_price = good.find_element_by_class_name(
                'p-price').text.replace("
", ":")

            # 评价人数
            good_commit = good.find_element_by_class_name(
                'p-commit').text.replace("
", " ")

            good_content = f'''
                        商品链接: {good_url}
                        商品名称: {good_name}
                        商品价格: {good_price}
                        评价人数: {good_commit}
                        

                        '''
            print(good_content)
            with open('jd.txt', 'a', encoding='utf-8') as f:
                f.write(good_content)

        next_tag = driver.find_element_by_class_name('pn-next')
        next_tag.click()

        time.sleep(2)

        # 递归调用函数
        get_good(driver)

        time.sleep(10)

    finally:
        driver.close()


if __name__ == '__main__':

    good_name = input('请输入爬取商品信息:').strip()

    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    # 1、往京东主页发送请求
    driver.get('https://www.jd.com/')

    # 2、输入商品名称,并回车搜索
    input_tag = driver.find_element_by_id('key')
    input_tag.send_keys(good_name)
    input_tag.send_keys(Keys.ENTER)
    time.sleep(2)

    get_good(driver)

通过今天的学习,又学到新的lenium模块,学习新的知识痛并快乐着,期待下次课程的学习。

原文地址:https://www.cnblogs.com/zmmm/p/11046853.html