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;
using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Support.UI; using OpenQA.Selenium.Support.UI;
using SeleniumExtras.WaitHelpers; using SeleniumExtras.WaitHelpers;
using System; using System;
using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Linq; using System.Linq;
using System.Windows.Forms; using System.Windows.Forms;
@@ -13,6 +15,8 @@ namespace NaverSearcher
{ {
ChromeDriver _ChromeDriver; ChromeDriver _ChromeDriver;
Random m_Random = new Random();
public Form1() public Form1()
{ {
InitializeComponent(); InitializeComponent();
@@ -126,25 +130,8 @@ namespace NaverSearcher
{ {
try 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)); WebDriverWait _WebDriverWait = new WebDriverWait(_ChromeDriver, TimeSpan.FromSeconds(3));
var rand = new Random();
string[][] key_word = string[][] key_word =
{ {
new string[] {"바나나우유 라떼", "초코우유 라떼" }, new string[] {"바나나우유 라떼", "초코우유 라떼" },
@@ -158,6 +145,19 @@ namespace NaverSearcher
// 네이버 메인 // 네이버 메인
// 스크롤 내린다. // 스크롤 내린다.
// 20 ~ 60초 대기 // 20 ~ 60초 대기
//
try
{
_ChromeDriver.Navigate().GoToUrl(@"https://naver.com");
_WebDriverWait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//*[@id=\"query\"]")));
string _logout = @"/html/body/div/div/div[1]/div[1]/a[1]";
if (IsElementPresent(_ChromeDriver, By.XPath(_logout)))
{
_ChromeDriver.FindElement(By.XPath(_logout)).Click();
}
foreach (string key in key_pair) foreach (string key in key_pair)
{ {
@@ -170,36 +170,73 @@ namespace NaverSearcher
// 스크롤 내리기 // 스크롤 내리기
// 20 ~ 60초 대기 // 20 ~ 60초 대기
// 새창 닫기 // 새창 닫기
try
{
_ChromeDriver.Navigate().GoToUrl(@"https://naver.com"); _ChromeDriver.Navigate().GoToUrl(@"https://naver.com");
string _search_xpath = "//*[@id=\"query\"]"; string _query_xpath = "//*[@id=\"query\"]";
_WebDriverWait.Until(ExpectedConditions.ElementIsVisible(By.XPath(_search_xpath)));
var _elment = _ChromeDriver.FindElement(By.XPath(_search_xpath)); _WebDriverWait.Until(ExpectedConditions.ElementIsVisible(By.XPath(_query_xpath)));
IWebElement _query_elment = _ChromeDriver.FindElement(By.XPath(_query_xpath));
foreach (var item in HangulString.CharacterMakeHistory(key)) foreach (var item in HangulString.CharacterMakeHistory(key))
{ {
_elment.Clear(); _query_elment.Clear();
_elment.SendKeys(item); _query_elment.SendKeys(item);
Delay(rand.Next(500, 1000)); Delay(m_Random.Next(500, 1000));
} }
_elment.SendKeys(OpenQA.Selenium.Keys.Enter); _query_elment.SendKeys(OpenQA.Selenium.Keys.Enter);
((IJavaScriptExecutor)_ChromeDriver).ExecuteScript("window.scrollBy(0, document.body.scrollHeight);"); ((IJavaScriptExecutor)_ChromeDriver).ExecuteScript("window.scrollBy(0, document.body.scrollHeight);");
Delay(rand.Next(2000, 6000)); Delay(m_Random.Next(2000, 6000));
ReadOnlyCollection<IWebElement> links = _ChromeDriver.FindElements(By.TagName("a")); ReadOnlyCollection<IWebElement> links = _ChromeDriver.FindElements(By.CssSelector("a[href*='https://']"));
links[rand.Next(0, links.Count)].Click(); 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);"); ((IJavaScriptExecutor)_ChromeDriver).ExecuteScript("window.scrollBy(0, document.body.scrollHeight);");
Delay(rand.Next(2000, 6000)); 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);
}
}
}
catch (Exception ex)
{
Console.WriteLine("=== 검색어 페어 ===");
Console.WriteLine(ex.Message);
} }
} }
return; /*
var elem = _ChromeDriver.FindElementByXPath("//*"); var elem = _ChromeDriver.FindElementByXPath("//*");
var source_code = elem.GetAttribute("outerHTML"); var source_code = elem.GetAttribute("outerHTML");
@@ -297,10 +334,12 @@ namespace NaverSearcher
//_ChromeDriver.FindElement(By.XPath(_search_xpath)).SendKeys(@"인플 검색"); //_ChromeDriver.FindElement(By.XPath(_search_xpath)).SendKeys(@"인플 검색");
*/
} }
catch (Exception ex) 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) private static DateTime Delay(int MS)
{ {
DateTime ThisMoment = DateTime.Now; DateTime ThisMoment = DateTime.Now;
TimeSpan duration = new TimeSpan(0, 0, 0, 0, MS); TimeSpan duration = new TimeSpan(0, 0, 0, 0, MS);
DateTime AfterWards = ThisMoment.Add(duration); DateTime AfterWards = ThisMoment.Add(duration);
while (AfterWards >= ThisMoment) while (AfterWards >= ThisMoment)
{ {
System.Windows.Forms.Application.DoEvents(); System.Windows.Forms.Application.DoEvents();
ThisMoment = DateTime.Now; ThisMoment = DateTime.Now;
} }
return DateTime.Now; return DateTime.Now;
}
private bool IsElementPresent(IWebDriver _IWebDriver, By by)
{
try
{
_IWebDriver.FindElement(by);
return true;
}
catch (NoSuchElementException)
{
return false;
}
} }
} }
} }