|
|
@@ -15,15 +15,17 @@ import (
|
|
|
)
|
|
|
|
|
|
type Browser struct {
|
|
|
- log *logrus.Logger
|
|
|
- rodOptions *BrowserOptions // 参数
|
|
|
- multiBrowser []*rod.Browser // 多浏览器实例
|
|
|
- browserIndex int // 当前使用的浏览器的索引
|
|
|
- browserLocker sync.Mutex // 浏览器的锁
|
|
|
- LbHttpUrl string // 负载均衡的 http proxy url
|
|
|
- LBPort int //负载均衡 http 端口
|
|
|
- httpProxyUrls []string // XrayPool 中的代理信息
|
|
|
- socksProxyUrls []string // XrayPool 中的代理信息
|
|
|
+ log *logrus.Logger
|
|
|
+ rodOptions *BrowserOptions // 参数
|
|
|
+ multiBrowser []*rod.Browser // 多浏览器实例
|
|
|
+ browserIndex int // 当前使用的浏览器的索引
|
|
|
+ browserLocker sync.Mutex // 浏览器的锁
|
|
|
+ httpProxyIndex int // 当前使用的 http 代理的索引
|
|
|
+ httpProxyLocker sync.Mutex // http 代理的锁
|
|
|
+ LbHttpUrl string // 负载均衡的 http proxy url
|
|
|
+ LBPort int //负载均衡 http 端口
|
|
|
+ httpProxyUrls []string // XrayPool 中的代理信息
|
|
|
+ socksProxyUrls []string // XrayPool 中的代理信息
|
|
|
}
|
|
|
|
|
|
// NewMultiBrowser 面向与爬虫的时候使用 Browser
|
|
|
@@ -89,7 +91,8 @@ func NewMultiBrowser(browserOptions *BrowserOptions) *Browser {
|
|
|
return b
|
|
|
}
|
|
|
|
|
|
-func (b *Browser) GetOneBrowser() *rod.Browser {
|
|
|
+// GetLBBrowser 这里获取到的 Browser 使用的代理是负载均衡的代理
|
|
|
+func (b *Browser) GetLBBrowser() *rod.Browser {
|
|
|
|
|
|
b.browserLocker.Lock()
|
|
|
defer func() {
|
|
|
@@ -104,6 +107,27 @@ func (b *Browser) GetOneBrowser() *rod.Browser {
|
|
|
return b.multiBrowser[b.browserIndex]
|
|
|
}
|
|
|
|
|
|
+// NewBrowser 每次新建一个 Browser ,使用 HttpProxy 列表中的一个作为代理
|
|
|
+func (b *Browser) NewBrowser() (*rod.Browser, error) {
|
|
|
+
|
|
|
+ b.httpProxyLocker.Lock()
|
|
|
+ defer func() {
|
|
|
+ b.httpProxyIndex++
|
|
|
+ b.httpProxyLocker.Unlock()
|
|
|
+ }()
|
|
|
+
|
|
|
+ if b.httpProxyIndex >= len(b.httpProxyUrls) {
|
|
|
+ b.httpProxyIndex = 0
|
|
|
+ }
|
|
|
+
|
|
|
+ oneBrowser, err := NewBrowserBase(b.log, "", b.httpProxyUrls[b.httpProxyIndex], b.rodOptions.LoadAdblock)
|
|
|
+ if err != nil {
|
|
|
+ return nil, errors.New("NewBrowser.NewBrowserBase error:" + err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ return oneBrowser, nil
|
|
|
+}
|
|
|
+
|
|
|
func (b *Browser) Close() {
|
|
|
|
|
|
for _, oneBrowser := range b.multiBrowser {
|