1. 링크 클릭 및 익셉션 제거

This commit is contained in:
2021-08-03 21:39:24 +09:00
parent 240e6c3b45
commit 26941bcced

View File

@@ -1,8 +1,10 @@
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Support.UI;
using SeleniumExtras.WaitHelpers;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows.Forms;
@@ -13,6 +15,8 @@ namespace NaverSearcher
{
ChromeDriver _ChromeDriver;
Random m_Random = new Random();
public Form1()
{
InitializeComponent();
@@ -126,30 +130,13 @@ namespace NaverSearcher
{
try
{
/*
_ChromeDriver.execute_script('window.open("about:blank", "_blank");')
_ChromeDriver.execute_script('window.open("about:blank", "_blank");')
tabs = _ChromeDriver.window_handles
# TAB_1
_ChromeDriver.switch_to_window(tabs[0])
_ChromeDriver.get('http://www.naver.com/')
# TAB_2
_ChromeDriver.switch_to_window(tabs[1])
_ChromeDriver.get('http://www.google.com/')
*/
WebDriverWait _WebDriverWait = new WebDriverWait(_ChromeDriver, TimeSpan.FromSeconds(3));
var rand = new Random();
string[][] key_word =
{
new string[] {"바나나우유 라떼", "초코우유 라떼" },
new string[] { "민트초코바", "민트색" }
};
};
foreach (string[] key_pair in key_word)
{
@@ -157,49 +144,99 @@ namespace NaverSearcher
// 로그아웃 실행
// 네이버 메인
// 스크롤 내린다.
// 20 ~ 60초 대기
// 20 ~ 60초 대기
//
foreach (string key in key_pair)
try
{
// 검색어 입력 (검색어 1)
// 검색어 확인
// 스크롤 내린다.
// 20 ~ 60초 대기
// 아무 게시글 클릭
// 이동된 페이지 작업
// 스크롤 내리기
// 20 ~ 60초 대기
// 새창 닫기
_ChromeDriver.Navigate().GoToUrl(@"https://naver.com");
_WebDriverWait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//*[@id=\"query\"]")));
string _search_xpath = "//*[@id=\"query\"]";
_WebDriverWait.Until(ExpectedConditions.ElementIsVisible(By.XPath(_search_xpath)));
string _logout = @"/html/body/div/div/div[1]/div[1]/a[1]";
var _elment = _ChromeDriver.FindElement(By.XPath(_search_xpath));
foreach (var item in HangulString.CharacterMakeHistory(key))
if (IsElementPresent(_ChromeDriver, By.XPath(_logout)))
{
_elment.Clear();
_elment.SendKeys(item);
Delay(rand.Next(500, 1000));
_ChromeDriver.FindElement(By.XPath(_logout)).Click();
}
foreach (string key in key_pair)
{
// 검색어 입력 (검색어 1)
// 검색어 확인
// 스크롤 내린다.
// 20 ~ 60초 대기
// 아무 게시글 클릭
// 이동된 페이지 작업
// 스크롤 내리기
// 20 ~ 60초 대기
// 새창 닫기
try
{
_ChromeDriver.Navigate().GoToUrl(@"https://naver.com");
string _query_xpath = "//*[@id=\"query\"]";
_WebDriverWait.Until(ExpectedConditions.ElementIsVisible(By.XPath(_query_xpath)));
IWebElement _query_elment = _ChromeDriver.FindElement(By.XPath(_query_xpath));
foreach (var item in HangulString.CharacterMakeHistory(key))
{
_query_elment.Clear();
_query_elment.SendKeys(item);
Delay(m_Random.Next(500, 1000));
}
_query_elment.SendKeys(OpenQA.Selenium.Keys.Enter);
((IJavaScriptExecutor)_ChromeDriver).ExecuteScript("window.scrollBy(0, document.body.scrollHeight);");
Delay(m_Random.Next(2000, 6000));
ReadOnlyCollection<IWebElement> links = _ChromeDriver.FindElements(By.CssSelector("a[href*='https://']"));
int _try = links.Count;
do
{
try
{
int _sel = m_Random.Next(0, links.Count);
string kknd = links[_sel].GetAttribute("href");
links[_sel].Click();
break;
}
catch (Exception ex)
{
}
} while (--_try > 0);
((IJavaScriptExecutor)_ChromeDriver).ExecuteScript("window.scrollBy(0, document.body.scrollHeight);");
Delay(m_Random.Next(2000, 6000));
if (_ChromeDriver.WindowHandles.First() != _ChromeDriver.WindowHandles.Last())
{
_ChromeDriver.SwitchTo().Window(_ChromeDriver.WindowHandles.Last());
_ChromeDriver.Close();
_ChromeDriver.SwitchTo().Window(_ChromeDriver.WindowHandles.First());
}
}
catch (Exception ex)
{
Console.WriteLine("=== 검색어 ===");
Console.WriteLine(ex.Message);
}
}
_elment.SendKeys(OpenQA.Selenium.Keys.Enter);
((IJavaScriptExecutor)_ChromeDriver).ExecuteScript("window.scrollBy(0, document.body.scrollHeight);");
Delay(rand.Next(2000, 6000));
ReadOnlyCollection<IWebElement> links = _ChromeDriver.FindElements(By.TagName("a"));
links[rand.Next(0, links.Count)].Click();
((IJavaScriptExecutor)_ChromeDriver).ExecuteScript("window.scrollBy(0, document.body.scrollHeight);");
Delay(rand.Next(2000, 6000));
}
catch (Exception ex)
{
Console.WriteLine("=== 검색어 페어 ===");
Console.WriteLine(ex.Message);
}
}
return;
/*
var elem = _ChromeDriver.FindElementByXPath("//*");
var source_code = elem.GetAttribute("outerHTML");
@@ -297,10 +334,12 @@ namespace NaverSearcher
//_ChromeDriver.FindElement(By.XPath(_search_xpath)).SendKeys(@"인플 검색");
*/
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Console.WriteLine("=== 실행 ===");
Console.WriteLine(ex.Message);
}
}
@@ -315,27 +354,32 @@ namespace NaverSearcher
}
private static DateTime Delay(int MS)
{
DateTime ThisMoment = DateTime.Now;
TimeSpan duration = new TimeSpan(0, 0, 0, 0, MS);
DateTime AfterWards = ThisMoment.Add(duration);
while (AfterWards >= ThisMoment)
{
System.Windows.Forms.Application.DoEvents();
ThisMoment = DateTime.Now;
}
return DateTime.Now;
}
private bool IsElementPresent(IWebDriver _IWebDriver, By by)
{
try
{
_IWebDriver.FindElement(by);
return true;
}
catch (NoSuchElementException)
{
return false;
}
}
}
}