App.java 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package me.yoqi.crawlbid;
  2. import java.awt.Image;
  3. import java.util.function.Consumer;
  4. import java.util.regex.Pattern;
  5. import org.openqa.selenium.OutputType;
  6. import org.openqa.selenium.chrome.ChromeDriver;
  7. import org.openqa.selenium.chrome.ChromeOptions;
  8. import org.openqa.selenium.devtools.DevTools;
  9. import org.openqa.selenium.devtools.network.Network;
  10. import org.openqa.selenium.devtools.network.model.ResourceType;
  11. import org.openqa.selenium.devtools.network.model.ResponseReceived;
  12. import me.yoqi.crawlbid.model.Config;
  13. /**
  14. * Hello world!
  15. *
  16. */
  17. public class App {
  18. static DevTools devTools;
  19. static ChromeDriver driver;
  20. public static void main(String[] args) {
  21. String chromeDriverPath = Config.getString("App.chromeDriverPath");
  22. System.setProperty("webdriver.chrome.driver", chromeDriverPath);
  23. ChromeOptions options = new ChromeOptions();
  24. options.addArguments("lang=zh_CN.UTF-8",
  25. "user-agent=\"Mozilla/5.0 (iPod; U; CPU iPhone OS 2_1 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F137 Safari/525.20\"",
  26. "cookies=");
  27. // options.setProxy(proxy);
  28. driver = new ChromeDriver(options);
  29. // 打开devtools
  30. devTools = driver.getDevTools();
  31. devTools.createSession();
  32. devTools.send(
  33. Network.enable(java.util.Optional.empty(), java.util.Optional.empty(), java.util.Optional.empty()));
  34. String startUrl = Config.getString("App.startUrl");
  35. driver.get(startUrl);
  36. String pattern = Config.getString("App.patten");
  37. final StringBuilder sb = new StringBuilder();
  38. InterceptCallback<String> callback = new InterceptCallback<String>() {
  39. public void emit(String res) {
  40. sb.append(res);
  41. }
  42. };
  43. interceptResponse4XHR(pattern, callback);
  44. // 点击每页100条
  45. driver.findElementByCssSelector("#app div.el-input.el-input--mini.el-input--suffix").click();
  46. try {
  47. Thread.sleep(500);
  48. } catch (InterruptedException e1) {
  49. // TODO Auto-generated catch block
  50. e1.printStackTrace();
  51. }
  52. driver.findElementByXPath("/html/body/div[2]/div[1]/div[1]/ul/li[6]").click();
  53. System.out.println("res:" + sb);
  54. for (int i = 2; i < 4; i++) {
  55. // 点击下一页
  56. driver.findElementByCssSelector("#app button.btn-next").click();
  57. final StringBuilder sb1 = new StringBuilder();
  58. InterceptCallback<String> callback1 = new InterceptCallback<String>() {
  59. public void emit(String res) {
  60. sb1.append(res);
  61. }
  62. };
  63. try {
  64. Thread.sleep(1000);
  65. } catch (InterruptedException e) {
  66. e.printStackTrace();
  67. }
  68. devTools.clearListeners();
  69. interceptResponse4XHR(pattern, callback1);
  70. // driver.close(); //关闭当前tab标签
  71. // devTools.close();
  72. System.out.println("res:" + sb1);
  73. }
  74. // driver.quit(); // 关闭浏览器
  75. }
  76. public static void interceptResponse4XHR(String pattern, InterceptCallback<String> callback) {
  77. // 请求监听
  78. devTools.addListener(Network.responseReceived(), new Consumer<ResponseReceived>() {
  79. public void accept(ResponseReceived responseReceived) {
  80. if (ResourceType.XHR != responseReceived.getType()) {
  81. return;
  82. }
  83. // 获取url,判断获取指定的ajax 接口请求
  84. boolean isMatch = Pattern.matches(pattern, responseReceived.getResponse().getUrl());
  85. if (isMatch) {
  86. String body = devTools.send(Network.getResponseBody(responseReceived.getRequestId())).getBody();
  87. callback.emit(body);
  88. }
  89. }
  90. });
  91. }
  92. public void screenShot() {
  93. // 截屏
  94. OutputType<Image> outputType = new OutputType<Image>() {
  95. @Override
  96. public Image convertFromBase64Png(String base64Png) {
  97. // TODO Auto-generated method stub
  98. return null;
  99. }
  100. @Override
  101. public Image convertFromPngBytes(byte[] png) {
  102. // TODO Auto-generated method stub
  103. return null;
  104. }
  105. };
  106. driver.getScreenshotAs(outputType);
  107. }
  108. }