Python爬虫:playwright的使用

打印 上一主题 下一主题

主题 1002|帖子 1002|积分 3006

1. 获取元素的文本方法:inner_text()
  1. # 1. 获取元素的文本方法:inner_text()
  2. from playwright.sync_api import sync_playwright
  3. with sync_playwright() as p:   
  4.     browser = p.chromium.launch(headless=False)   
  5.     page = browser.new_page()   
  6.     page.goto("https://example.com")   
  7.     text = page.locator("h1").inner_text()    
  8.     print("获取的文本:", text)   
  9.     browser.close()
  10. # 通过 inner_text() 方法获取页面中指定元素的文本内容。例如,获取 <h1> 标签的文本。
  11. # 2. 获取所有匹配元素的文本方法:all_inner_texts()
  12. from playwright.sync_api import sync_playwright
  13. with sync_playwright() as p:   
  14.     browser = p.chromium.launch(headless=False)   
  15.     page = browser.new_page()   
  16.     page.goto("https://example.com")   
  17.     texts = page.locator("p").all_inner_texts()    
  18.     print("获取的所有文本:", texts)   
  19.     browser.close()
  20. # 使用 all_inner_texts() 获取所有匹配元素的文本内容,例如获取页面中所有 <p> 标签文本。
  21. # 3. 获取匹配元素的属性值方法:get_attribute()
  22. from playwright.sync_api import sync_playwright
  23. with sync_playwright() as p:   
  24.     browser = p.chromium.launch(headless=False)   
  25.     page = browser.new_page()   
  26.     page.goto("https://example.com")   
  27.     img_src = page.locator("img").get_attribute("src")    
  28.     print("图片的 src 属性:", img_src)   
  29.     browser.close()
  30. #通过 get_attribute() 获取指定元素的属性值,例如获取 <img> 标签的 src 属性
  31. # 4.获取 input 元素的 value 属性值方法:input_value()
  32. from playwright.sync_api import sync_playwright
  33. with sync_playwright() as p:   
  34.     browser = p.chromium.launch(headless=False)   
  35.     page = browser.new_page()   
  36.     page.goto("https://example.com")   
  37.     value = page.locator("#user").input_value()    
  38.     print("输入框的值:", value)   
  39.     browser.close()
  40. # 使用 input_value() 获取输入框的值,例如获取 <input id="user"> 的值。
  41. # 5. 获取元素的位置方法:bounding_box()
  42. from playwright.sync_api import sync_playwright
  43. with sync_playwright() as p:   
  44.     browser = p.chromium.launch(headless=False)   
  45.     page = browser.new_page()   
  46.     page.goto("https://example.com")   
  47.     rect = page.locator("#box11").bounding_box()    
  48.     print("元素的位置:", rect)   
  49.     browser.close()
  50. # 通过 bounding_box() 获取元素的位置和尺寸信息,例如获取 <div id="box11"> 的位置。
  51. # 6. 统计匹配到的元素个数方法:count()
  52. from playwright.sync_api import sync_playwright
  53. with sync_playwright() as p:   
  54.     browser = p.chromium.launch(headless=False)   
  55.     page = browser.new_page()   
  56.     page.goto("https://example.com")   
  57.     count = page.locator("li").count()    
  58.     print("匹配的元素个数:", count)   
  59.     browser.close()
  60. # 使用 count() 统计页面中匹配到的元素数量,例如统计所有 <li> 标签的数量。
  61. # 在自动化测试和数据抓取中,等待机制是确保操作成功的关键。
  62. # Playwright 提供了强大的等待功能,帮助开发者灵活应对各种场景。
  63. # 等待机制Playwright 默认提供了智能等待机制,等待时间为 30 秒(30000 毫秒)。你可以根据需要调整等待时间或使用特定的等待条件。
  64. # 7. 修改默认的等待时间方法:set_default_timeout(timeout)
  65. from playwright.sync_api import sync_playwright
  66. with sync_playwright() as p:   
  67.     browser = p.chromium.launch(headless=False)   
  68.     page = browser.new_page()   
  69.     page.set_default_timeout(5000)  # 设置默认等待时间为 5000 毫秒                        
  70.     page.goto("https://example.com")   
  71.     browser.close()
  72. # 通过 set_default_timeout() 方法设置全局等待时间,单位为毫秒。例如,将默认等待时间设置为 5000 毫秒。
  73. # 8.  等待页面处于某种状态方法:wait_for_load_state(state)
  74. from playwright.sync_api import sync_playwright
  75. with sync_playwright() as p:   
  76.     browser = p.chromium.launch(headless=False)   
  77.     page = browser.new_page()   
  78.     page.goto("https://example.com")   
  79.     page.wait_for_load_state("load")  # 等待页面加载完成    
  80.     print("页面加载完成!")   
  81.     browser.close()
  82. """
  83. 使用 wait_for_load_state() 等待页面加载状态达到指定条件。支持的状态包括:
  84.     'load':等待所有资源加载完成。
  85.     'domcontentloaded':等待 HTML 文档解析完成。
  86.     'networkidle':等待网络空闲(不推荐使用)。
  87. """
  88. # 9. 等待页面跳转到指定的 URL方法:wait_for_url(url)
  89. from playwright.sync_api import sync_playwright
  90. with sync_playwright() as p:   
  91.     browser = p.chromium.launch(headless=False)   
  92.     page = browser.new_page()   
  93.     page.goto("https://example.com")   
  94.     page.wait_for_url("**/target.html")  # 等待页面跳转到 target.html    
  95.     print("页面跳转完成!")   
  96.     browser.close()
  97. # 通过 wait_for_url() 等待页面跳转到指定的 URL。可以使用通配符 ** 匹配路径。
  98. # 10. 等待指定的时间方法:wait_for_timeout(timeout)
  99. from playwright.sync_api import sync_playwright
  100. with sync_playwright() as p:   
  101.     browser = p.chromium.launch(headless=False)   
  102.     page = browser.new_page()   
  103.     page.goto("https://example.com")   
  104.     page.wait_for_timeout(10000)  # 等待 10000 毫秒    
  105.     print("等待完成!")   
  106.     browser.close()
  107. # 使用 wait_for_timeout() 暂停执行指定时间,单位为毫秒。例如,暂停 10000 毫秒。
  108. # 11. 鼠标操作,鼠标点击,方法:page.mouse.click(x, y)
  109. """
  110. 通过 page.mouse.click() 方法模拟鼠标点击操作,指定点击的位置、按钮类型、点击次数和延迟时间。
  111. 参数:
  112.     x:X轴位置
  113.     y:Y轴位置
  114.     button:left、right、middle
  115.     click_count:点击次数,默认值为 1
  116.     delay:点击按下到释放的时间(以毫秒为单位)
  117. """
  118. from playwright.sync_api import sync_playwright
  119. with sync_playwright() as p:   
  120.     browser = p.chromium.launch(headless=False)   
  121.     page = browser.new_page()   
  122.     page.goto("https://example.com")   
  123.     page.mouse.click(100, 200, button="left", click_count=1, delay=100)                
  124.     print("鼠标点击完成!")   
  125.     browser.close()
  126. # 12. 按下鼠标方法:page.mouse.down()
  127. """
  128. 参数:
  129.     x:X轴位置
  130.     y:Y轴位置
  131.     button:left、right、middle
  132. 通过 page.mouse.down() 方法模拟鼠标按下操作,通常需要先移动鼠标到指定位置。
  133. """
  134. from playwright.sync_api import sync_playwright
  135. with sync_playwright() as p:   
  136.     browser = p.chromium.launch(headless=False)   
  137.     page = browser.new_page()   
  138.     page.goto("https://example.com")   
  139.     page.mouse.move(100, 200)   
  140.     page.mouse.down(button="left")    
  141.     print("鼠标按下完成!")   
  142.     browser.close()
  143. # 13. 移动鼠标方法:page.mouse.move()
  144. """
  145. 参数:
  146.     x:X轴位置
  147.     y:Y轴位置
  148. 通过 page.mouse.move() 方法移动鼠标到指定位置。
  149. """
  150. from playwright.sync_api import sync_playwright
  151. with sync_playwright() as p:   
  152.     browser = p.chromium.launch(headless=False)   
  153.     page = browser.new_page()   
  154.     page.goto("https://example.com")   
  155.     page.mouse.move(100, 200)    
  156.     print("鼠标移动完成!")   
  157.     browser.close()
  158. # 14. 释放鼠标方法:page.mouse.up()
  159. """
  160. 参数:
  161.     button:left、right、middle
  162.     click_count:点击次数,默认值为 1
  163. 通过 page.mouse.up() 方法释放鼠标按钮,通常与 page.mouse.down() 配合使用。
  164. """
  165. from playwright.sync_api import sync_playwright
  166. with sync_playwright() as p:   
  167.     browser = p.chromium.launch(headless=False)   
  168.     page = browser.new_page()   
  169.     page.goto("https://example.com")   
  170.     page.mouse.move(100, 200)   
  171.     page.mouse.down(button="left")   
  172.     page.mouse.up(button="left")    
  173.     print("鼠标释放完成!")   
  174.     browser.close()
  175. # 15. 元素拖拽综合方法方法:page.drag_and_drop(source, target)
  176. """
  177. 参数:
  178.     source:拖拽元素的定位表达式
  179.     target:目标元素的定位表达式
  180. 通过 page.drag_and_drop() 方法实现元素的拖拽操作,指定拖拽的源元素和目标元素。
  181. """
  182. from playwright.sync_api import sync_playwright
  183. with sync_playwright() as p:   
  184.     browser = p.chromium.launch(headless=False)   
  185.     page = browser.new_page()   
  186.     page.goto("https://example.com")   
  187.     page.drag_and_drop('//*[@id="box22"]', '//*[@id="box11"]')    
  188.     print("元素拖拽完成!")   
  189.     browser.close()
  190. # 16.  鼠标滚轮滚动 方法:page.mouse.wheel(delta_x, delta_y)
  191. """
  192. 参数:
  193.     delta_x:要水平滚动的像素
  194.     delta_y:要垂直滚动的像素
  195. 通过 page.mouse.wheel() 方法模拟鼠标滚轮滚动,指定水平和垂直滚动的像素值。
  196. """
  197. from playwright.sync_api import sync_playwright
  198. with sync_playwright() as p:   
  199.     browser = p.chromium.launch(headless=False)   
  200.     page = browser.new_page()   
  201.     page.goto("https://example.com")   
  202.     page.mouse.wheel(0, 100)  # 向下滚动 100 像素    
  203.     print("鼠标滚动完成!")   
  204.     browser.close()
  205. # 17 使用 Playwright 实现拖拽操作案例代码
  206. """
  207. 启动浏览器和页面:使用 launch() 启动浏览器,并通过 new_page() 创建一个新页面。
  208. 加载页面:使用 goto() 加载本地 HTML 文件。
  209. 等待元素加载:使用 wait_for_selector() 确保拖拽和目标元素已经加载完成。
  210. 执行拖拽操作:使用 drag_and_drop() 方法实现拖拽操作,指定拖拽的源元素和目标元素。
  211. 关闭浏览器:完成操作后关闭浏览器。Playwright 提供了强大的鼠标操作功能,尤其是 drag_and_drop 方法,可以轻松实现复杂的拖拽操作
  212. """
  213. from playwright.sync_api import sync_playwright
  214. def run_drag_and_drop():   
  215.     with sync_playwright() as p:       
  216.         browser = p.chromium.launch(headless=False)       
  217.         page = browser.new_page()                   
  218.         page.goto("file:///path/to/your/drag_and_drop.html")  # 替换为你的本地文件路径       
  219.         page.wait_for_selector("#box22")       
  220.         page.wait_for_selector("#box11")               
  221.         # 拖拽操作            
  222.         page.drag_and_drop("#box22", "#box11")                
  223.         print("拖拽操作完成!")       
  224.         browser.close()
  225. # 调用函数
  226. run_drag_and_drop()
  227. # 18 按下键盘按键方法:keyboard.down(key)
  228. """
  229. 通过 keyboard.down() 方法模拟按下指定按键,例如按下 Enter 键。
  230. 参数:
  231.     key:要按下的键的名称或要生成的字符
  232. """
  233. from playwright.sync_api import sync_playwright
  234. with sync_playwright() as p:   
  235.     browser = p.chromium.launch(headless=False)   
  236.     page = browser.new_page()        
  237.     page.goto("https://www.toptal.com/developers/keycode")        
  238.     page.wait_for_timeout(2000)   
  239.     page.keyboard.down("Enter")  # 按下 Enter 键   
  240.     page.wait_for_timeout(2000)   
  241.     browser.close()
  242. # 19 松开键盘 按键方法:keyboard.up(key)
  243. """
  244. 通过 keyboard.press() 方法模拟按下并松开指定按键,例如按下并松开 A 键。
  245. 参数:
  246.     key:要松开的键的名称或要生成的字符
  247. """
  248. from playwright.sync_api import sync_playwright
  249. with sync_playwright() as p:   
  250.     browser = p.chromium.launch(headless=False)   
  251.     page = browser.new_page() 
  252.     page.goto("https://www.toptal.com/developers/keycode")            
  253.     page.wait_for_timeout(2000)   
  254.     page.keyboard.press("A")  # 按下并松开 A 键   
  255.     page.wait_for_timeout(2000)   
  256.     browser.close()
  257. # 20 使用键盘进行文本输入方法:keyboard.type(text)
  258. """
  259. 通过 keyboard.type() 方法在焦点元素中输入文本
  260. 参数:
  261.     text:要输入到焦点元素中的文本
  262. """
  263. from playwright.sync_api import sync_playwright
  264. with sync_playwright() as p:   
  265.     browser = p.chromium.launch(headless=False)   
  266.     page = browser.new_page()   
  267.     page.goto("https://www.baidu.com")   
  268.     page.wait_for_timeout(2000)   
  269.     page.locator("#kw").focus()  # 定位到百度搜索框   
  270.     page.wait_for_timeout(2000)   
  271.     page.keyboard.type("1234567890")  # 输入文本   
  272.     page.wait_for_timeout(2000)   
  273.     browser.close()
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表