使用到的库:Selenium(以谷歌浏览器为例,若要使用别的浏览器,安装对应浏览器的Driver包即可)
代码如下:
class Program
{
public static string m_loginUrl = "https://passport.damai.cn/login?ru=https%3A%2F%2Fwww.damai.cn%2F";
public static string m_account = "";
public static string m_password = "";
public static string m_searchKeyWords = "";
public static string m_cityKeyWords = "";
public static IWebDriver m_driver;
public static void Main(string[] args)
{
InitWebDriver();
Login();
SearchConcert();
ChooseConcert();
}
public static void InitWebDriver()
{
ChromeOptions options = new ChromeOptions();
options.AddAdditionalChromeOption("useAutomationExtension", false);
options.AddExcludedArgument("enable-automation");
options.AddArgument("--start-maximized");
options.AddArgument("disable-infobars");
// 反爬虫特征处理
options.AddArgument("--disable-blink-features=AutomationControlled");
options.AddUserProfilePreference("credentials_enable_service", false);
options.AddUserProfilePreference("profile.password_manager_enable", false);
m_driver = new ChromeDriver(options);
}
public static void Login()
{
m_driver.Navigate().GoToUrl(m_loginUrl);
m_driver.SwitchTo().Frame(0);
m_driver.FindElement(By.CssSelector("#fm-login-id")).SendKeys(m_account);
m_driver.FindElement(By.CssSelector("#fm-login-password")).SendKeys(m_password);
m_driver.FindElement(By.CssSelector("#login-form > div.fm-btn > button")).Click();
IWebElement slider = m_driver.FindElement(By.CssSelector("#nc_1_n1z"));
if (slider.Displayed)
{
Actions action = new Actions(m_driver);
action.ClickAndHold(slider).Perform();
action.MoveByOffset(260, 0).Perform();
action.Pause(new TimeSpan(1)).Release().Perform();
}
}
public static void SearchConcert()
{
Thread.Sleep(2000);
m_driver.SwitchTo().Window(m_driver.WindowHandles[0]);
m_driver.FindElement(By.CssSelector("body > div.dm-header-wrap > div > div.search-header > input")).SendKeys(m_searchKeyWords);
m_driver.FindElement(By.CssSelector("body > div.dm-header-wrap > div > div.search-header > div.btn-search")).Click();
}
public static void ChooseConcert()
{
var elements = m_driver.FindElements(By.CssSelector("body > div.search-box > div.search-box-flex > div.search-main > div.search__itemlist > div.item__main > div.item__box > div.items > div.items__txt > div.items__txt__title"));
foreach (IWebElement element in elements)
{
if (element.Text.Contains(m_cityKeyWords))
{
Console.WriteLine(string.Format($"{element.Text}"));
element.Click();
}
}
}
}